【问题标题】:How to extract symbols and see their offset in the file如何提取符号并在文件中查看它们的偏移量
【发布时间】:2019-12-05 23:56:38
【问题描述】:

我可以使用“nm -a -D”命令提取符号。
但是有没有办法提取从文件开头偏移的符号名称?

例如,

nm -D ./libc.so

给我看这个 -

...
00000000000f8c60 T xdr_wrapstring
00000000000f7cc0 T xencrypt
00000000000bd230 T __xmknod
00000000000bd2a0 T __xmknodat
000000000003ec70 T __xpg_basename
00000000000314b0 W __xpg_sigpause
0000000000080db0 T __xpg_strerror_r
00000000000f6090 T xprt_register
00000000000f61f0 T xprt_unregister
00000000000bd110 T __xstat
00000000000bd110 T __xstat64

现在,我想从文件开头获取符号名称的偏移量,就像“strings -t x”命令显示字符串的偏移量一样-

strings -t x ./libc.so | grep __xstat
  13af9 __xstat
  13fac __xstat64

我该怎么做?

(我不能在“nm”命令的输出中使用“strings”命令,因为文件中可能有相同符号字符串的多个实例,我想获得符号的确切偏移量(不是只是一些与符号相同的字符串))

【问题讨论】:

    标签: linux shared-libraries symbols elf nm


    【解决方案1】:

    但是有没有办法从文件开头提取带有偏移量的符号名称?

    肯定是:nm 正在这样做(为了打印名称)。

    您应该知道可能有两个符号表:一个常规的和一个动态的(nm -D 显示后者)。

    符号本身存储在.dynsym 部分(或常规符号表的.symtab 部分)中,它们包含.dynstr 部分(实际上包含名称)的偏移量。

    因此,添加".dynstr".sh_offset + "symbol".st_name 将为您提供文件中符号名称的偏移量。

    示例代码here。 (代码使用.symtab.strtab;你需要调整它以使用.dynsym.dynstr来打印动态符号表。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 2019-06-07
      相关资源
      最近更新 更多