如何解决添加断点时GDB反汇编地址不同
这是我的带有行号的函数
8 | void function(char* string) {
9 | char buffer[16];
10| strcpy(buffer,string);
11| }
这里是 gdb disassemble function
输出
0x000011d4 <+0>: push %ebp
0x000011d5 <+1>: mov %esp,%ebp
0x000011d7 <+3>: push %ebx
0x000011d8 <+4>: sub $0x14,%esp
0x000011db <+7>: call 0x123d <__x86.get_pc_thunk.ax>
0x000011e0 <+12>: add $0x2e20,%eax
0x000011e5 <+17>: sub $0x8,%esp <---- I want Break point here
0x000011e8 <+20>: pushl 0x8(%ebp)
0x000011eb <+23>: lea -0x18(%ebp),%edx
0x000011ee <+26>: push %edx
0x000011ef <+27>: mov %eax,%ebx
0x000011f1 <+29>: call 0x1030 <strcpy@plt>
0x000011f6 <+34>: add $0x10,%esp
0x000011f9 <+37>: nop
0x000011fa <+38>: mov -0x4(%ebp),%ebx
0x000011fd <+41>: leave
0x000011fe <+42>: ret
如果我使用以下命令在 0x000011e5
处设置断点,
(gdb) b *0x000011e5
并运行程序,gdb忽略所有断点并退出。
但是,如果我指定,b 9
,它有效。
这是输出
(gdb) b 10
Breakpoint 1 at 0x4011e5: file hello.c,line 10.
为什么地址不同?
解决方法
为什么地址不同
因为您有一个与位置无关的可执行文件,它在地址 0 处链接,但在运行时重定位到不同的地址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。