为什么我找不到使用此 IDC 脚本的所有功能?

逆向工程 艾达 蟒蛇 idapro插件
2021-06-20 13:39:11

在 Linux 32 位上,我使用 IDA Pro + IDC 脚本来转储所有功能。这是脚本的一部分:

addr = 0;
for (addr = NextFunction(addr); addr != BADADDR; addr = NextFunction(addr)) {
    name = Name(addr);
    end = GetFunctionAttr(addr, FUNCATTR_END);
    Message("%s:\n", name);

    dumpFunction(name, addr, end);
}

close_stdin在此脚本中找不到某些函数,例如在 GNU coreutils 静态库中定义的函数,但我可以在File->Produce File->Create ASM File...

我的脚本有问题吗?我可以用它找出所有的功能吗?

1个回答

你的脚本没问题。在自动分析期间,IDA 可能无法将您的函数识别为函数,这可能是一个问题。如果您将在 IDA pro 中转到此函数的地址,请在反汇编视图中按 P 键并重新运行脚本,您可能会转储函数。

这个问题有一个非常不正确的解决方案(不正确意味着它并不总是提供好的/正确的结果)。如果您将传递任何非函数区域并使用下面的脚本自动创建函数,则之前未定义为函数的所有内容都将与您的脚本一起转储,但我不确定这些结果的正确性。

#I didn't check this code, run on your own risk, 
#use carefully, beware errors

import idaapi
import idc

segm = idaapi.get_segm_by_name(".text")
start = segm.startEA
end = segm.endEA

while start < end:

  start = idaapi.find_not_func(start, 1)
  print "Attempt to create function at", hex(start)
  idc.MakeFunction(start)

  start += 1 # for a case of any error