如何在 Ghidra 中使用 python 获取包含特殊指令(如“CALL”或“RET”)的所有基本二进制块?

逆向工程 吉德拉 Python
2021-06-20 22:48:57

我正在使用 Ghidra 对 ARM 二进制文件进行逆向工程。我想打印包含特定指令(如“CALL”或“RET”)的所有函数的所有块的反汇编。我怎么做?

1个回答

您可以执行以下操作:

# get all functions
functions = program.getFunctionManager().getFunctions(True)
for function in functions:
    cur = function.getEntryPoint()
    while cur:
        inst = getInstructionAt(cur)
        if inst:
            # add similar check for call instruction
            if "RET" in inst.getMnemonicString():
                #do something
                print(inst)
                # this will break when function returns
                break
        cur = cur.next()

我为 x86 二进制文件编写了这个脚本,但它也适用于 arm(您可能需要做一些小的更改),因为 api 是相同的。