Ida pro gragh输出批处理模式

时间:2015-02-20 00:27:15

标签: ida gdlib disassembly

任何人都可以告诉我们如何以批处理模式输出所有子程序的图表起诉IDC。即我有447子程序,并希望将它们全部输出,我想确保我首先自动检索所有例程地址,因为我知道地址我可以简单地使用GenFuncCall。 P.S:这是我可以从Ida Pro获得的唯一cfg给出一个二进制解组文件吗?

2 个答案:

答案 0 :(得分:2)

我需要整个程序的CFG,我开始的基本示例是:  https://code.google.com/p/idapython/source/browse/trunk/examples/ex_gdl_qflow_chart.py

它使用流程图类:  https://www.hex-rays.com/products/ida/support/idapython_docs/idaapi.FlowChart-class.html

还值得注意在批处理模式下触发,你会想要这样的东西

  

idal64 -A -S {yourscriptname} .py {yourbinary}

提示:

  • 首先在IDAPro gui中对脚本进行原型设计
  • 图形处理器的打开可能导致计时问题,它的hacky,但延迟执行脚本似乎有帮助,例如。

    idaapi.autoWait() Timer(2, idacfg).start()

    其中idacfg是示例中的python函数

  • print to stdout似乎无法在批处理模式下工作,因此您需要将stdout设置为一个文件以供调试。

  • 以批处理模式关闭GUI仍然是我的问题。

希望有所帮助。

答案 1 :(得分:1)

如果你只想要IDB中所有已知函数的地址,你可以使用IDAPython这样的东西(只是一个例子):

def main():
    for count, func_ea in enumerate(Functions()):
        if func_ea == BADADDR:
            break
        func_name = GetFunctionName(funcea)
        func_start = func_ea

        print("[{:4}] name: {}; start address: {:#x}".format(count, func_name, func_start))

if __name__ == "__main__":
    main()