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

如何使用GDB获取共享库的基地址

GDB获取共享库基地址实操指南

下面是3种可直接落地的操作方法,按使用场景选择即可:

方法1:直接查询共享库加载信息(最常用)

这是最简单的原生命令,无需额外操作:

  • 调试状态下(程序已启动并停在任意断点/start之后),直接执行命令:
    info sharedlibrary 或简写为 info shared
  • 输出结果中第一列From对应的地址就是目标共享库的基地址,示例输出如下:
(gdb) info shared
From                To                  Syms Read   Shared Object Library
0x00007ffff7fc9000  0x00007ffff7fefadc  Yes         /lib64/ld-linux-x86-64.so.2
0x00007ffff7d81000  0x00007ffff7ee7170  Yes         /lib/x86_64-linux-gnu/libc.so.6

上面示例中0x00007ffff7d81000就是libc库的基地址。

方法2:通过进程内存映射查询

如果需要更完整的内存段信息,可以用这个方法:

  • 调试状态下执行命令:
    info proc mappings
  • 找到对应共享库路径的内存段,权限为r--p的第一段起始地址就是共享库基地址。
    如果需要过滤特定库,可以配合shell命令,将其中$PID替换为当前调试进程的ID,libc替换为你要找的库名关键字即可:
    shell grep libc /proc/$PID/maps
    示例输出:
(gdb) shell grep libc /proc/1234/maps
7f8a12345000-7f8a124c0000 r--p 00000000 103:02 123456 /usr/lib/x86_64-linux-gnu/libc.so.6

示例中7f8a12345000就是libc库的基地址。

方法3:脚本/自动化场景下获取

如果你需要把基地址存入GDB变量供后续调试逻辑使用,可以用如下方式:
以获取libc基地址为例,先获取__libc_start_main函数的运行时地址,减去该函数在libc中的静态偏移即可。静态偏移可以提前通过readelf -s /lib/x86_64-linux-gnu/libc.so.6 | grep __libc_start_main拿到,假设偏移为0x23ab0,执行:
set $libc_base = (unsigned long long)__libc_start_main - 0x23ab0
后续直接调用$libc_base就能获取基地址数值。

注意事项

  • 必须等待程序启动并完成动态链接后再查询,刚打开GDB程序还没运行时,共享库还未加载,查不到正确的地址。可以先执行start命令让程序停在main函数入口后再执行查询操作。
  • 开启ASLR的场景下,每次重启程序共享库的基地址都会变化,每次调试都要重新查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:05