gpt4 book ai didi

c - 目标文件和可执行文件的反汇编差异

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:05 25 4
gpt4 key购买 nike

基本上,我使用objdump -D 来反汇编目标文件和ELF 文件。我认为两者之间的主要区别在于。

我看到目标文件(各个段的)中的指令有一个以 0 开头的地址。因此,连续的地址偏移某个值,可能取决于与该特定指令对应的操作码的长度

Disassembly of section .text:
00000000 <main>:
0: 8d 4c 24 04 lea 0x4(%esp),%ecx
4: 83 e4 f0 and $0xfffffff0,%esp
7: ff 71 fc pushl -0x4(%ecx)
a: 55 push %ebp

另一方面,对于 ELF 罚款,我看到指令的 32 位地址空间。此外,如果我在我的程序中打印 main 的地址。相当于我反汇编的ELF里面的地址。

08048394 <main>:
8048394: 8d 4c 24 04 lea 0x4(%esp),%ecx
8048398: 83 e4 f0 and $0xfffffff0,%esp
804839b: ff 71 fc pushl -0x4(%ecx)
804839e: 55 push %ebp

这里的问题是。

  • ELF 文件中的地址实际指的是什么?
  • 链接器如何计算它们?

最佳答案

ELF 文件包含根据可执行文件的首选加载地址链接在一起的代码(您可以通过链接器选项更改首选项)。您看到的地址是由 objdump 针对该地址计算得出的,该地址是 ELF 格式的一部分。

目标代码(还)没有加载地址,因为它没有链接到可加载的图像中。一旦它与链接器(连同目标代码的其余部分和共享对象引用)拼接在一起,最终输出将所有代码移动到与首选加载地址相对应的位置(有点......当加载器实际执行此操作时加载 ELF 镜像以执行)。 Suggested further reading (那里有大量链接)

关于c - 目标文件和可执行文件的反汇编差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174304/

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