
这是我的gdb输出。我如何使它写行号,而不是...227变成main+1,就像我拆解它时所显示的那样?
发布于 2019-02-14 22:31:42
由于机器指令地址和源代码行号不直接相关,所以不清楚您要问的是什么。可能适合您的需要是使用混合源/反汇编。例如:
(gdb) disassemble /m main
Dump of assembler code for function main:
5 {
0x08048330 <+0>: push %ebp
0x08048331 <+1>: mov %esp,%ebp
0x08048333 <+3>: sub $0x8,%esp
0x08048336 <+6>: and $0xfffffff0,%esp
0x08048339 <+9>: sub $0x10,%esp
6 printf ("Hello.\n");
0x0804833c <+12>: movl $0x8048440,(%esp)
0x08048343 <+19>: call 0x8048284 <puts@plt>
7 return 0;
8 }
0x08048348 <+24>: mov $0x0,%eax
0x0804834d <+29>: leave
0x0804834e <+30>: ret
End of assembler dump.这显示了机器代码反汇编之前的每一行源代码都与其关联。同时显示源行号、指令地址和偏移量。请注意,如果您应用优化,它可能是不可理解的,因为代码经常被删除或重新排序,以至于它不再与源代码顺序直接对应。
如果您想在步骤中显示当前的程序计数器地址/偏移量,那么可以使用display /i $pc命令来完成:
(gdb) display /i $pc
(gdb) run
Starting program: /home/a.out
Breakpoint 2, main () at main.c:13
13 printf("Hello World");
1: x/i $pc
=> 0x40053a <main+4>: mov $0x4005d4,%edi
(gdb) step
__printf (format=0x4005d4 "Hello World") at printf.c:28
28 printf.c: No such file or directory.
1: x/i $pc
=> 0x7ffff7a686b0 <__printf>: sub $0xd8,%rsp
(gdb)https://stackoverflow.com/questions/54699578
复制相似问题