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

时间:2012-04-27 07:52:15

标签: linux debugging disassembly instructions

现在我有一个来自EIP寄存器的机器指令地址。这台机器指令可以改变某个内存区域的值,我确实想要但不能得到这个内存的地址。

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

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

1 个答案:

答案 0 :(得分:1)

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

#create binary file
$ echo -en "\x8b\x0c\x4d\x8b" > foo.bin

#disassemble it
$ objdump -D -b binary -m i386 foo.bin 

foo.bin:     file format binary


Disassembly of section .data:

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

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

编辑:您希望以编程方式执行此操作的评论。看看udis86。它允许examining operands指令。对于ARM,请参阅disarm