gpt4 book ai didi

linux - 链接后显示长地址的 objdump

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:11 26 4
gpt4 key购买 nike

我在 nasm (linux) 中写了一个简单的小程序:

nasm program

使用命令 nasm -f elf32 -o file.o file.asm生成目标文件。

使用 objdump -M intel -d file.o 时我得到这个结果:

objdump

我看到 objdump 显示的地址是合理的,但是当我使用命令 ld -m elf_i386 -o executable file.o 进行编译以生成可执行代码时;我通过在可执行文件上使用 objdump 得到以下结果:

enter image description here

问题:

  1. 虽然可执行文件很小(最多500字节),但为什么地址会变得这么长。
  2. 关于地址指向什么,我确定它没有指向内存,因为程序还没有收费。
  3. 它们是相对地址还是绝对地址??如果是相对的,那么相对于什么??如果是绝对的,它们怎么可能是绝对的,程序还没有在内存中收费。

如果这个问题对你们中的一些人来说似乎很愚蠢,我真的很抱歉,但我真的需要理解这一点,这将对我的项目有很大帮助。

最佳答案

Why did the addresses became this long, although, the executable file is very small (500 bytes at most).

因为 i386 Linux 的默认加载地址是 0x8048000。该地址与您的程序有多大或多小完全无关。您可以将其更改为其他地址,例如-Ttext-segment=0x...000 链接器标志。

On what does addresses point to, I am sure that it doesn't point in the memory

它指向内核在将控制权传递给它之前加载您的可执行文件的地址。这也称为“链接地址”。您可以查看 readelf -l a.out 以查看您的二进制文件中存在哪些 PT_LOAD 段,以及它们将被加载到内存中的什么位置。

Are they relative or absolut addresses

绝对。

关于linux - 链接后显示长地址的 objdump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36343705/

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