如何将反汇编的指令转换为在gdb中以二进制形式显示?

时间:2019-07-02 23:04:46

标签: binary gdb

我有一个二进制文件,已在gdb中将其反汇编为可见的程序集。但是,我想查看每条指令的实际二进制文件(即以实际发出给CPU的任何指​​令格式的实际指令)。有没有办法输入指令的地址并以二进制形式查看该指令?

无论什么地址,我都尝试使用p / t 0x --------,但是它将地址本身解码为二进制。 我尝试了相同的操作,但是使用$ 0x --------,这产生了“无法将值转换为整数”错误。

我希望能够在gdb看到的二进制地址中以给定的地址(例如0x00000300)看到lwi或ori等指令。

2 个答案:

答案 0 :(得分:0)

您正在寻找disassemble/r 0x...

来自manual

print the raw instructions in hex as well as in symbolic
form by specifying the /r modifier. 

更新

  

我可以在布局asm中看到从我的二进制文件中获得的汇编指令。但是单独运行反汇编命令使我看不到任何内容,因为它显示“没有函数包含指定的地址”。

因此您的二进制文件被剥离(或者至少GDB不知道最近的函数在哪里)。

解决方案是仅分解您感兴趣的指令。例如:

(gdb) disas 0x0000555555556d60
No function contains specified address.

(gdb) disas 0x0000555555556d60,+1
Dump of assembler code from 0x555555556d60 to 0x555555556d61:
   0x0000555555556d60:  mov    %edi,%eax
End of assembler dump.

(gdb) disas/r 0x0000555555556d60,+1
Dump of assembler code from 0x555555556d60 to 0x555555556d61:
   0x0000555555556d60:  89 f8   mov    %edi,%eax
End of assembler dump.

答案 1 :(得分:0)

我找到了解决方案,那就是编写以下命令:

p / x * [十六进制地址]

例如:

p / x * 0x00000300