【问题标题】:Why do ld, nm, objdump report 'no symbols' in this shared object, when symbols appear to exist?当符号似乎存在时,为什么 ld、nm、objdump 在此共享对象中报告“无符号”?
【发布时间】:2020-07-22 04:37:57
【问题描述】:

我有一个未记录的共享对象 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,我的代码也是。

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

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

【问题讨论】:

  • 它可能已被剥离,因此您无法链接它。试试objdump -d,看看是不是只有乱码。
  • @S.S.Anne objdump -d 没有给出超出上述第一行的输出。
  • 你是为 x86 还是 ARM 编译?
  • ARM 小端序。

标签: c gcc linker shared-libraries


【解决方案1】:

此共享对象没有节标题:

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

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 2019-05-31
    • 2012-05-14
    • 2010-09-25
    • 2021-07-05
    • 1970-01-01
    • 2021-07-22
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多