无法访问内存 – gdb
这是我的disas代码:
Dump of assembler code for function main: 0x00000000000006b0 : push %rbp 0x00000000000006b1 : mov %rsp,%rbp 0x00000000000006b4 : sub $0x10,%rsp 0x00000000000006b8 : movl $0xa,-0xc(%rbp) 0x00000000000006bf : lea -0xc(%rbp),%rax 0x00000000000006c3 : mov %rax,-0x8(%rbp) 0x00000000000006c7 : lea 0x96(%rip),%rdi # 0x764 0x00000000000006ce : mov $0x0,%eax 0x00000000000006d3 : callq 0x560 0x00000000000006d8 : mov $0x0,%eax 0x00000000000006dd : leaveq 0x00000000000006de : 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
您正在查看与位置无关的可执行文件 (一种特殊的共享库)。 当可执行文件开始运行时, main
的代码将重定位到不同的地址。
因为重定位可执行文件时0x6b4
处没有代码,GDB会抱怨它无法在那里设置断点。
但是当我使用b 4并运行代码时,它正常工作。
在这种情况下,GDB了解您要在第4行设置断点,并在重定位可执行文件后插入适当的断点。
使用info break
查看重定位的地址。