You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GDB为开启ASLR的远程无符号进程自动重基设断点?

解决GDB远程调试ASLR进程自动设置断点的方法

其实GDB本身就支持自动处理ASLR带来的基址偏移问题,不用手动计算,以下是几种实用方案:

  • 直接通过函数名设置断点(推荐)
    只要调试的进程编译时带有调试符号(编译参数加-g),或者本地GDB加载了对应可执行文件/库的符号文件,直接执行命令:

    break 函数名
    

    GDB会自动读取远程进程的内存映射信息,计算ASLR导致的基址偏移,定位到函数的实际内存地址并设置断点。

  • 针对无调试符号但有动态符号的二进制
    如果目标程序没有调试符号,但保留了动态符号表(默认编译不会去掉),可以直接通过符号名加星号的方式设置断点:

    break *函数名
    

    比如要给printf设断点,执行break *printf即可,GDB会从远程进程的动态符号表中解析出函数的实际地址。

  • 手动指定符号文件与基址(极端情况)
    如果远程进程的库或可执行文件本地没有,或者符号表被剥离,可以先通过远程的/proc/PID/maps获取加载基址,然后在GDB中加载符号文件并指定基址:

    add-symbol-file /path/to/local/library.so 0x基址
    

    加载完成后,依然可以用函数名设置断点,GDB会自动计算偏移。

另外,远程调试时确保本地GDB连接后,执行set solib-search-path /path/to/remote/libs,让GDB能找到远程进程加载的库文件,这样符号解析会更准确。

内容的提问来源于stack exchange,提问作者Kokomelom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:30:41