如何设置命名代码位置的字节相对断点(函数+偏移形式)?
直接通过符号+偏移设置断点的方法
当然有,你可以直接使用符号名+偏移量的语法来设置断点,完全不需要依赖固定的内存地址。
具体命令
在gdb中,直接执行以下命令即可:
b testing::internal::ForkingDeathTest::Wait()+131
语法说明
- 调试器会自动解析
testing::internal::ForkingDeathTest::Wait()这个符号对应的基地址,再加上131字节的偏移量,精准定位到你要的指令位置。 - 无论程序开启ASLR(地址空间随机化)导致每次加载的基地址变化,还是重新编译后符号地址变动,这个命令都能正确找到目标位置。
额外注意事项
- 偏移量默认是十进制,如果要用十六进制,需要加上
0x前缀,比如对应131的十六进制是0x83,命令可以写成:b testing::internal::ForkingDeathTest::Wait()+0x83 - 如果符号名称包含特殊字符(比如空格、模板参数等),可以用单引号把符号名括起来:
b 'testing::internal::ForkingDeathTest::Wait()'+131
内容的提问来源于stack exchange,提问作者Gem Taylor
相关产品推荐
相关产品推荐

