gpt4 book ai didi

c - 有没有办法用 GNU binutils 取消隐藏隐藏的可见性符号?

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:15 24 4
gpt4 key购买 nike

我正在编写一个脚本,使 uClibc 可用于现有的以 glibc 为目标的 gcc/binutils 工具链,而我留下的一个问题是 pthread_cancel 需要 dlopen libgcc_s.so.1。主机 gcc 提供的版本链接到依赖于 glibc,所以我改为使用 ld-u 选项来提取所需的符号(及其依赖项) ) 从 libgcc_eh.a 替换 libgcc_s.so.1:

gcc -specs uclibc.specs -Wl,-u,_Unwind_Resume -Wl,-u,__gcc_personality_v0 \
-Wl,-u,_Unwind_ForcedUnwind -Wl,-u,_Unwind_GetCFA -shared -o libgcc_s.so.1

原则上我会完成,但是 libgcc_eh.a 中的所有符号都将其可见性设置为隐藏,因此在输出 .so 文件中,它们都变成了本地,不要添加到 .dynsym 符号表。

我正在寻找一种在 .so 文件或原始 上使用 binutils(可能是 objcopy?或链接描述文件?)的方法。 o libgcc_eh.a 中的 文件以取消隐藏这些符号。这可能吗?

最佳答案

objcopy 似乎没有这个功能,但是你可以用 ELFkickers rebind tool 来实现:

rebind --visibility default file.o SYMBOLS...

这必须在原始 .o 文件上完成。如果您尝试在 .so 上执行此操作,则为时已晚,因为隐藏的符号将从 .dynsym 部分中省略。

关于c - 有没有办法用 GNU binutils 取消隐藏隐藏的可见性符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com