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