首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >了解readelf中的重定位表输出

了解readelf中的重定位表输出
EN

Stack Overflow用户
提问于 2013-10-25 15:28:05
回答 1查看 12K关注 0票数 4

例如,运行命令:

代码语言:javascript
运行
复制
readelf -r /bin/ls | head -n 20

我得到以下输出:

代码语言:javascript
运行
复制
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段中的位置?“信息和类型”列是什么意思,我以为重定位只是将符号引用映射到定义,所以我不明白为什么会有不同的类型?为什么某些符号名以0作为其值的地址.我不能想象他们都映射到文本片段中的同一个位置?最后,为什么重定位表甚至存在于最终的可执行文件中?它是否占用了额外的空间,并且所有的引用都已经为生成可执行文件的最后一个链接命令解析了?

EN

回答 1

Stack Overflow用户

发布于 2014-09-08 08:23:32

这里有一个清晰的输出(我希望如此):

  1. 偏移量是符号值应移至的偏移量。
  2. 信息告诉我们两件事:类型(终止精确的计算取决于拱形)和符号索引在符号标签中。
  3. 根据ABI输入符号的类型
  4. Sym值是要添加到符号解析中的加载项。
  5. Sym名称和加载项-符号名+加载项的漂亮打印。

有关计算示例,请参阅此示例:https://web.archive.org/web/20150324024617/http://mylinuxbook.com/readelf-command/更多信息:01/html/819-0690/chapter6-54839.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19593883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档