如何在IDAPython中获得没有偏移翻译的反汇编线?

逆向工程 艾达 二元分析 蟒蛇
2021-07-03 05:54:50

当我使用GetDisasm()获取反汇编线时,我发现它会将一些内存引用显示为变量名。

例如,当原始程序集是:

mov %r15, 0x20b062(%rip)`

GetDisasm()的输出可能是:

mov r15d, offset s1

我希望有一种方法可以获得原始指令,而不是修改后的指令?

1个回答

不幸的是,IDA 的反汇编不能与 IDA 固有的数据类型信息分开(并且被认为是它的最大优势之一)。

但是,您可以手动更改该信息,以使 IDA 根据需要显示反汇编。例如,您可以使用idc.OpHex(ea, n)API 函数将指令操作数设为十六进制数字格式。

例如,为了将第二个操作数的类型从偏移参数类型更改为十六进制参数类型,您可以idc.OpHex将指令地址作为第一个参数,将操作数编号作为第二个参数(1在您的示例中)进行调用,或者-1对于所有操作数。

例如,给定 IDA 中的以下指令:

.text:00401421                 mov     ebx, offset aL4jDontWait ; "--l4j-dont-wait"

和输出:

Python>idc.GetDisasm(0x0401421)
mov     ebx, offset aL4jDontWait; "--l4j-dont-wait"
Python>idc.OpHex(0x0401421, 1)
True
Python>idc.GetDisasm(0x0401421)
mov     ebx, 407000h

然后,您可以只加载以前的保存以“撤消”所有这些更改。