查看程序集和C代码

时间:2012-04-02 03:41:29

标签: gdb

我们是否有办法使用gdb查看程序集和c代码。

反汇编function_name只显示程序集,我试图找到一种方法来将map c代码放到程序集中。 感谢

3 个答案:

答案 0 :(得分:47)

您可以在文本用户界面(TUI)模式下运行gdb:

gdb -tui <your-binary>
(gdb) b main
(gdb) r
(gdb) layout split

layout split命令将窗口分为两部分 - 其中一部分显示源代码,另一部分显示相应的程序集。 其他一些技巧:

  • 设置反汇编英特尔 - 如果您更喜欢英特尔符号
  • set print asm-demangle - 在汇编视图中解码C ++名称
  • ni - 下一条指令
  • si - 步骤说明

如果您不想使用TUI模式(例如您的终端不喜欢它),您可以随时执行:

x /12i $pc

表示从当前程序计数器地址打印12条指令 - 这也适用于上述技巧(解码,步进指令等)。

“x / 12i $ pc”技巧在gdb和cgdb中都有效,而“layout split”仅适用于gdb。

享受:)

答案 1 :(得分:27)

尝试disassemble /m

请参阅http://sourceware.org/gdb/current/onlinedocs/gdb/Machine-Code.html#Machine-Code

格式类似于objdump -S的格式,并且将源与反汇编混合。示例输出摘录:

10      int i = 0;
=> 0x0000000000400536 <+9>: movl   $0x0,-0x14(%rbp)

11      while (1) {
12          i++;
   0x000000000040053d <+16>:    addl   $0x1,-0x14(%rbp)

答案 2 :(得分:5)

为了您的目的,请尝试

objdump -S <your_object_file>
来自man objdump的

-S
--source
 Display source code intermixed with disassembly, if possible.
 Implies -d.