c - 当符号似乎存在时,为什么 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,我的代码也是。
我的目标是能够按原样链接到这个库。
为什么有些工具可以看到符号,而有些则看不到?
解决方案
此共享对象没有节标题:
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
推荐阅读
- azure - 错误:部署参数使用区分大小写的名称。错误参数名称:名称。(ARM 模板部署)
- linux - 如何将参数传递到 shell 脚本中的文件中?
- apache-spark - 根据 pyspark 中的列和窗口期中的过滤条件计算平均值
- javascript - 如何用 JS 创建两个类似的增量游戏升级
- java - 方法设计模式 - 强制所有方法遵循一个模式
- elixir - Elixir 中与 Ruby 中的实例变量有什么相似的用法?
- android - Android 应用程序在改造拦截器中因 SocketTimeoutException 而崩溃
- python - txt 文件作为输入以反序列化 protobuff python 中的数据,无法以正确格式读取数据
- java - Android 中的单选按钮和单选组
- hash - Xamarin ios,SSL pinning:计算的公钥哈希不匹配