【发布时间】:2017-03-24 11:53:59
【问题描述】:
这是我的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 并运行代码时,它工作正常。那么在第一种情况下我做错了什么。
【问题讨论】:
-
你检查过断点工作时的地址吗?它们与反汇编匹配吗?
-
是的,它们是一样的
-
那些地址非常低。您能否编辑您的问题以添加对您的操作系统、编译设置、gdb 命令行选项等的描述?
-
那些反汇编的指令偏移看起来是在链接器“重新定位”代码之前。强烈建议始终使用程序中存在的标签(如函数名称和/或您放置在源代码中的标签和/或函数名称 + 偏移量