gpt4 book ai didi

elf - 了解 readelf 的重定位表输出

转载 作者:行者123 更新时间:2023-12-01 17:59:49 31 4
gpt4 key购买 nike

例如,运行命令:

readelf -r /bin/ls | head -n 20

我得到以下输出:

Relocation section '.rela.dyn' at offset 0x15b8 contains 7 entries:
Offset Info Type Sym. Value Sym. Name + Addend
000000619ff0 003e00000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
00000061a580 006f00000005 R_X86_64_COPY 000000000061a580 __progname + 0
00000061a590 006c00000005 R_X86_64_COPY 000000000061a590 stdout + 0
00000061a5a0 007800000005 R_X86_64_COPY 000000000061a5a0 optind + 0
00000061a5a8 007a00000005 R_X86_64_COPY 000000000061a5a8 optarg + 0
00000061a5b0 007400000005 R_X86_64_COPY 000000000061a5b0 __progname_full + 0
00000061a5b8 007700000005 R_X86_64_COPY 000000000061a5b8 stderr + 0

Relocation section '.rela.plt' at offset 0x1660 contains 105 entries:
Offset Info Type Sym. Value Sym. Name + Addend
00000061a018 000100000007 R_X86_64_JUMP_SLO 0000000000000000 __ctype_toupper_loc + 0
00000061a020 000200000007 R_X86_64_JUMP_SLO 0000000000000000 getenv + 0
00000061a028 000300000007 R_X86_64_JUMP_SLO 0000000000000000 sigprocmask + 0
00000061a030 000400000007 R_X86_64_JUMP_SLO 0000000000000000 raise + 0
00000061a038 007000000007 R_X86_64_JUMP_SLO 00000000004020a0 free + 0
00000061a040 000500000007 R_X86_64_JUMP_SLO 0000000000000000 localtime + 0
00000061a048 000600000007 R_X86_64_JUMP_SLO 0000000000000000 __mempcpy_chk + 0

我不明白这个输出,需要一些澄清。

第一列偏移量是否指示这些符号引用在 .text 段中的位置? Info 和 Type 列是什么意思,我认为重定位只是将符号引用映射到定义,所以我不明白怎么会有不同的类型?为什么某些符号名称将 0 作为其值的地址...我无法想象它们都映射到文本段中的同一位置?最后,为什么重定位表甚至存在于最终的可执行文件中?它不会占用额外的空间,并且生成可执行文件的最后一个链接命令的所有引用都已解析吗?

最佳答案

这是 readelf 输出的清晰(我希望如此):

  1. Offset 是符号值应该到达的偏移量
  2. 信息告诉我们两件事 - 类型(根据拱形终止精确计算)和符号表中的符号索引
  3. 类型 - 根据 ABI 的符号类型
  4. Sym 值是要添加到符号分辨率的加数
  5. 符号名称和加数 - 符号名称 + 加数的 pretty-print 。
<小时/>

请参阅计算示例: https://web.archive.org/web/20150324024617/http://mylinuxbook.com/readelf-command/更多信息: http://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-54839.html

关于elf - 了解 readelf 的重定位表输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19593883/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com