【问题标题】:Symbol value in .symtab for executable object files.symtab 中用于可执行目标文件的符号值
【发布时间】:2014-03-14 14:59:09
【问题描述】:

我读到 ELF 可执行对象文件不可重定位,并且其 .symtab 中的符号具有绝对地址/“值”,而不是可重定位对象的“相对偏移量”。我的理解正确吗?

如果是,那么绝对地址是如何确定的?由于绝大多数可执行目标文件驻留在 ROM(例如 HDD)中而不是 RAM 中,因此您不需要在执行之前将文件加载到 RAM 中吗?那不是和“搬家”一样吗?

谢谢

【问题讨论】:

    标签: executable elf


    【解决方案1】:

    一个非位置无关的可执行文件被链接到一个固定地址被加载(到 RAM)。例如,在 32 位 x86 Linux 上,默认的链接地址是 0x8048000。该地址可以更改为例如-Ttext 链接器参数。

    .symtab 部分中的符号值确实是绝对的,并假定二进制文件加载到它链接到加载的地址。

    可执行目标文件驻留在 ROM(例如 HDD)而不是 RAM 中,您不需要在执行之前将文件加载到 RAM 中吗?

    是的,但这与符号是相对还是绝对无关。

    【讨论】:

    • 感谢您的回答,我没有很好地表达我的问题。实际上有两个问题: -我对“可重定位”的定义感到困惑;我之前的想法是可重定位意味着文件可以移动到内存中的任何位置,而“不可重定位”意味着文件不能移动(即从 ROM 到 RAM)。现在看起来很傻:) - 可执行文件不可重定位,如果我正确阅读了您的答案,这实际上意味着它将被加载到 .symtab 中指定的预定绝对地址?如果是这样的话,如果那里已经加载了其他东西怎么办?
    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 2010-10-22
    • 1970-01-01
    • 2017-01-31
    • 2018-07-12
    • 2019-10-20
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多