使用环境变量调试动态链接器
Linux 下的动态链接/装载器 (ld.so, ld-linux.so*) 支持通过环境变量来改变程序运行时的动态链接行为,灵活使用会给调试工作带来很多方便。
LD_BIND_NOT
标记;如果设定,则会执行延迟绑定,即决议 (resolve) 某个符号之后,不更新全局偏移表 (GOT) 和过程链接表 (PLT)LD_BIND_NOW
标记;如果设定,则会指定立即绑定,即程序启动后决议所有的符号,并更新 GOT 和 PLTLD_DEBUG
输出动态链接器的 debug 信息,设为 all 将会输出所有的调试信息,设为 help 将会输出帮助信息LD_DEBUG_PATH
指定 LD_DEBUG 输出的文件路径;如果未指定,默认输出到标准输出LD_DYNAMIC_WEAK
允许弱符号 (weak symbols) 被外部符号覆盖 (旧版 glibc 的行为)LD_HWCAP_MASK
设置硬件、平台兼容性的掩码LD_LIBRARY_PATH
一个用冒号分隔的列表,用来指定运行时动态库的搜索路径LD_PRELOAD
一个用空格分隔的列表,用来指定程序在运行时首先被装载的共享库。可利用这个特性来覆盖其他共享库中定义的函数。对于设定了强制位 (setuid/setgid) 的可执行程序,只有在标准搜索路径里面并且也被设定强制位 (setuid) 的共享库才能被装载。LD_ORIGIN_PATH
指向可执行文件的系统路径LD_PROFILE
指定要分析的共享库LD_PROFILE_OUTPUT
指定共享库分析结果的输出文件;如果未指定,默认输出到标准输出LD_SHOW_AUXV
显示从内核传递的辅助数组LD_TRACE_LOADED_OBJECTS
标记;如果设定,将会列出依赖性而不是实际运行(如 ldd)LD_WARN
标记;如果设定,将会警告未定义符号LD_VERBOSE
标记;如果设置,则在查询有关程序的信息时输出有关程序的符号版本控制信息
注:以上环境变量只支持 glibc 2.2 及以上版本。
通过 man 手册可以查看有关动态链接器的更详细的信息:
1 | $ man ld.so |