gpt4 book ai didi

linux - ELF标签地址

转载 作者:太空狗 更新时间:2023-10-29 11:41:31 27 4
gpt4 key购买 nike

我在 .s 文件中有以下代码:

pushq $afterjmp
nop
afterjmp:
movl %eax, %edx

它的目标文件有以下内容:

20: 68 00 00 00 00          pushq  $0x0
25: 90 nop
0000000000000026 <afterjmp>:
26: 89 c2 mov %eax,%edx

链接后变成:

400572: 68 78 05 40 00          pushq  $0x400578
400577: 90 nop
400578: 89 c2 mov %eax,%edx

目标文件的字节 20pushq 的参数 0x0 如何转换为 0x400578最后的可执行文件?

目标文件的哪个部分包含此信息?

最佳答案

您回答了自己的问题:链接后...

这是一篇好文章:

Linkers and Loaders

特别注意“符号重定位”部分:

Relocation. Compilers and assemblers generate the object code for each input module with a starting address of zero. Relocation is the process of assigning load addresses to different parts of the program by merging all sections of the same type into one section. The code and data section also are adjusted so they point to the correct runtime addresses.

汇编单个目标文件时,无法知道“afterjmp”的程序地址。只有当所有目标文件都组装成一个可执行镜像时,才能计算地址(相对于偏移“0”)。这是链接器的工作之一:跟踪“符号引用”(如“afterjmp”),并计算机器地址(“符号重定位”)。

关于linux - ELF标签地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157182/

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