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

标签 linux debugging disassembly instructions

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

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

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

最佳答案

如果您知道 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 .

关于linux - 如何获取一条机器指令写入的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10346828/

相关文章:

c++ - 避免在多线程套接字应用程序中重复使用相同的 fd 号

linux - Unix/Linux cat x y > y : is my understanding of the processing correct?

ruby - 在 JRuby 9000 中调试

debugging - VS2012 c++ <读取字符串字符时出错。>

assembly - 为什么编译器在除以 2 时会产生 31 位的右移?

linux - rsync 可以仅用于创建硬链接(hard link)而不是复制吗?

javascript - 如何调试名称改变的js脚本

assembly - punpcklbw(在 MMX/SSE/AVX 中交错)的用例有哪些?

assembly - riscv objdump 如何设置打印 x0-x31 寄存器名称而不是 abi 名称

python - 意外标记 `(' python 脚本附近的语法错误