【问题标题】:Does a linker need to adjust segment size when relocation takes more space?当重定位占用更多空间时,链接器是否需要调整段大小?
【发布时间】:2024-01-22 22:08:01
【问题描述】:

让我们假设以下情况: 在以 2 个字节编码的地址引用中存在对数据的跳转或引用。现在,当静态链接时,重定位会发生,因此新地址不适合 2 个字节——也许它需要 4 个字节。

我假设链接器将重写代码,可能使用不同的指令,并使用 4 个字节作为新地址。

然后链接器是否需要更新当前段/节的大小,并将所有更远的地址更新相同的偏移量(本例中为 +2 字节)?

【问题讨论】:

    标签: linker static-linking


    【解决方案1】:

    引用外部符号的机器指令不能使用缩写形式,其中位移或立即操作数被编码为一个字节(在运行时可扩展)而不是完整的字。

    链接器并不那么聪明地重新编译曾经组装的段(至少我写的那个不是:-)

    【讨论】: