linux - 如何提取符号并在文件中查看它们的偏移量
问题描述
我可以使用“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”命令,因为文件中可能有相同符号字符串的多个实例,我想获得符号的确切偏移量(不仅仅是一些字符串这与符号相同))
解决方案
但是有没有办法从文件开头提取带有偏移量的符号名称?
肯定是:nm
正在做(为了打印名字)。
您应该知道可能有两个符号表:一个常规的和一个动态的(nm -D
显示后者)。
符号本身存储在.dynsym
节(或.symtab
常规符号表的节)中,它们包含.dynstr
节的偏移量(实际上包含名称)。
因此,添加".dynstr".sh_offset
+"symbol".st_name
将为您提供文件中符号名称的偏移量。
示例代码在这里。(代码使用.symtab
and .strtab
;您需要调整它以使用.dynsym
和.dynstr
打印动态符号表。)
推荐阅读
- amazon-web-services - 在 AWS 代码构建步骤中获取源存储库提交哈希
- python - 哪种类型提示表示属性不能为 None?
- python - 如何删除此参数处理代码的重复数据?
- oracle - 满足条件时使用 CASE 语句创建包含数据的列
- python - Flask-SQLAlchemy 多对多关系:如何插入数据
- javascript - 如何让访问者在 2019 年在客户端“记住这些表单字段”?
- flutter - Flutter Streambuilder 暂停
- continuous-integration - 在 Github 操作管道上设置默认超时
- java-8 - Java 无效的密钥库格式
- python - Python:在for循环中添加到列表列表中