Linux 如何提取符号并在文件中查看其偏移量

Linux 如何提取符号并在文件中查看其偏移量,linux,shared-libraries,symbols,elf,nm,Linux,Shared Libraries,Symbols,Elf,Nm,我可以使用“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

我可以使用“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-tx”命令显示字符串偏移量的相同方式获得符号名称从文件开头的偏移量-

strings -t x ./libc.so | grep __xstat
  13af9 __xstat
  13fac __xstat64
我该怎么做

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

但是,有没有一种方法可以提取从文件开头偏移的符号名

确实有:
nm
正在这样做(以便打印名称)

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

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

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

示例代码。(代码使用
.symtab
.strtab
;您需要将其调整为使用
.dynsym
.dynstr
打印动态符号表。)