我们是否有办法使用gdb查看程序集和c代码。
反汇编function_name只显示程序集,我试图找到一种方法来将map c代码放到程序集中。 感谢
答案 0 :(得分:47)
您可以在文本用户界面(TUI)模式下运行gdb:
gdb -tui <your-binary>
(gdb) b main
(gdb) r
(gdb) layout split
layout split
命令将窗口分为两部分 - 其中一部分显示源代码,另一部分显示相应的程序集。
其他一些技巧:
如果您不想使用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.