如何在C/C++可执行文件中仅导出指定单个动态符号?
仅导出单个特定符号的解决方案
用链接脚本精准控制(推荐)
这是最直接的方式,能完全按照要求只导出指定符号:
- 写一个链接脚本文件,比如命名为
export_syms.script,内容如下:
{ global: my_target_symbol; # 把这里换成你要导出的符号名 local: *; # 把所有其他符号设为局部,不对外暴露 };
- 编译时带上这个脚本,示例编译命令:
gcc -fvisibility=hidden -Wl,--version-script=export_syms.script your_code.c -o your_executable
-fvisibility=hidden:让编译器默认隐藏所有符号--version-script:告诉链接器用我们写的脚本控制符号可见性
验证结果
编译完成后,用nm -D your_executable查看动态符号表,你会发现只有指定的符号被导出,那些像__libc_csu_init、_start这类多余符号都会被隐藏。
补充:动态符号表里的
__libc_start_main是未定义的外部依赖符号,不是我们程序导出的,属于正常现象,不影响dlsym操作。
内容的提问来源于stack exchange,提问作者kalyan
相关产品推荐
相关产品推荐

