Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IDA python查找问题_Python_Assembly_Ida - Fatal编程技术网

IDA python查找问题

IDA python查找问题,python,assembly,ida,Python,Assembly,Ida,我的目标是在进程的整个内存范围内搜索以下模式: pop * pop * retn 我尝试过使用FindText,但它似乎只返回已经在IDA中为其指令解析的区域的结果。因此,要使用FindText id,需要弄清楚如何解析指令的整个内存范围(这似乎需要大量内存) 所以我改用FindBinary,但也遇到了一个问题。我正在搜索的模式只需要匹配字节的前5位,其余的是通配符。因此,我的目标是搜索: 01011*** 01011*** 11000011 我发现一些帖子声称艾达有一个?字节的通配符,但

我的目标是在进程的整个内存范围内搜索以下模式:

pop *
pop *
retn
我尝试过使用FindText,但它似乎只返回已经在IDA中为其指令解析的区域的结果。因此,要使用FindText id,需要弄清楚如何解析指令的整个内存范围(这似乎需要大量内存)

所以我改用FindBinary,但也遇到了一个问题。我正在搜索的模式只需要匹配字节的前5位,其余的是通配符。因此,我的目标是搜索:

01011***
01011*** 
11000011
我发现一些帖子声称艾达有一个?字节的通配符,但我一直无法让它工作,即使它工作了,它似乎只工作了整整8位。因此,对于这种方法,我需要找到一种方法来搜索位模式,然后解析结果周围的位。这似乎是最可行的途径,但到目前为止,我还没有在搜索引擎中找到任何能搜索到这样的信息


有人知道如何实现我想要的吗?

在经典的stackoverflow风格中,我花了数小时试图解决这个问题,然后在寻求帮助20分钟后,我找到了我需要的确切函数,
get\u byte()

现在,如果我能弄清楚如何在每条指令中使用通配符的话。因为对于这个解决方案,我至少需要知道模式的一个完整字节

def find_test():
    base = idaapi.get_imagebase()
    while True:
        res = FindBinary(base, SEARCH_NEXT|SEARCH_DOWN, "C3")
        if res==BADADDR: break
        if 0b01011 == get_byte(res-1) >> 3 and 0b01011 == get_byte(res-2) >> 3: 
            print "{0:X}".format(res)
        base=res+1