首页 > 解决方案 > 当符号似乎存在时,为什么 ld、nm、objdump 在此共享对象中报告“无符号”?

问题描述

我有一个未记录的共享对象libXSAL.so,我想链接它。

我已经编写了一个包含我需要的函数的部分头文件,其中的签名是从 Ghidra 的逆向工程中推断出来的。

gcc链接时失败:undefined reference to 'function_name'对于我使用的每个功能。

nm -D libXSAL.so

nm: libXSAL.so: No symbols

objdump -t libXSAL.so

libXSAL.so:     file format elf32-little

SYMBOL TABLE:
no symbols

然而,Ghidra 发现了符号表中给出的函数名称,通过手动选择 hexdump,我也可以看到它们。

据我所见,图书馆和我自己的代码中都没有名称修饰。该库似乎是 C,我的代码也是。

我的目标是能够按原样链接到这个库。

为什么有些工具可以看到符号,而有些则看不到?

标签: cgcclinkershared-libraries

解决方案


此共享对象没有节标题:

libXSAL.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), invalid note alignment 0x1, dynamically linked, no section header

根据 ELF 标准:

链接时使用的文件必须有节头表;其他目标文件可能有也可能没有。

您也许可以重建节标题表,但祝您好运。

这是有意完成的(可能是使用strip),因此您无法链接到该文件。

这是执行此操作的选项strip

  -s --strip-all                   Remove all symbol and relocation information

推荐阅读