1

现在我从 EIP 寄存器中得到了一个机器指令的地址。该机器指令可以更改某个内存区域的值,我确实想要但无法获得该内存的地址。

当然,我可以从机器指令'地址读取数据,但内容是机器指令,如:0x8b0c4d8b......,它是不可读的(我不能使用gdb之类的调试工具)。

如何获取一条机器指令将写入的地址?

4

1 回答 1

1

如果您知道 EIP 指向的机器代码并且只想反汇编它,请执行以下操作(我以您的示例为例0x8b0c4d8b):

#创建二进制文件
$ echo -en "\x8b\x0c\x4d\x8b" > foo.bin

#拆开它
$ objdump -D -b 二进制 -m i386 foo.bin

foo.bin:文件格式二进制


.data 部分的反汇编:

00000000 :
   0: 8b .byte 0x8b
   1: 0c 4d 或 $0x4d,%al
   3:8b .byte 0x8b

因此,在这种情况下,它不会更改任何内存位置,但如果确实如此,您可以从汇编代码中轻松看到它。

编辑:从评论看来,您想以编程方式执行此操作。看看udis86。它允许检查指令的操作数。对于 ARM,请参阅解除武装

于 2012-04-27T08:22:01.480 回答