这是我的disas代码:
Dump of assembler code for function main:
0x00000000000006b0 <+0>: push %rbp
0x00000000000006b1 <+1>: mov %rsp,%rbp
0x00000000000006b4 <+4>: sub $0x10,%rsp
0x00000000000006b8 <+8>: movl $0xa,-0xc(%rbp)
0x00000000000006bf <+15>: lea -0xc(%rbp),%rax
0x00000000000006c3 <+19>: mov %rax,-0x8(%rbp)
0x00000000000006c7 <+23>: lea 0x96(%rip),%rdi # 0x764
0x00000000000006ce <+30>: mov $0x0,%eax
0x00000000000006d3 <+35>: callq 0x560 <printf@plt>
0x00000000000006d8 <+40>: mov $0x0,%eax
0x00000000000006dd <+45>: leaveq
0x00000000000006de <+46>: retq
当我通过 b *0x00000000000006b4 在 0x06b4 设置断点并运行代码时,出现错误Starting program: /root/print.out
Warning:
Cannot insert breakpoint 4.
Cannot access memory at address 0x6b4
但是当我这样做时b 4并运行代码,工作正常。那么在第一种情况下我做错了什么。
Dump of assembler code for function main:
0x00000000000006b0 <+0>: push %rbp
0x00000000000006b1 <+1>: mov %rsp,%rbp
你正在看位置无关的可执行文件 https://en.wikipedia.org/wiki/Position-independent_code(一种特殊的共享库)。代码为main
gets 搬迁当可执行文件开始运行时到不同的地址。
因为没有代码0x6b4
一旦可执行文件被重新定位,GDB 就会抱怨它无法在那里设置断点。
但是当我用 b 4 执行此操作并运行代码时,它工作正常。
在这种情况下,GDB 知道您要在第 4 行设置断点,并插入适当的断点after可执行文件已被重新定位。
Use info break
查看搬迁地址是什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)