当我使用GetDisasm()
获取反汇编线时,我发现它会将一些内存引用显示为变量名。
例如,当原始程序集是:
mov %r15, 0x20b062(%rip)`
GetDisasm()
的输出可能是:
mov r15d, offset s1
我希望有一种方法可以获得原始指令,而不是修改后的指令?
当我使用GetDisasm()
获取反汇编线时,我发现它会将一些内存引用显示为变量名。
例如,当原始程序集是:
mov %r15, 0x20b062(%rip)`
GetDisasm()
的输出可能是:
mov r15d, offset s1
我希望有一种方法可以获得原始指令,而不是修改后的指令?
不幸的是,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
然后,您可以只加载以前的保存以“撤消”所有这些更改。