gpt4 book ai didi

c - 二进制文件上 objdump 输出左侧的地址是什么?

转载 作者:行者123 更新时间:2023-11-30 14:36:58 25 4
gpt4 key购买 nike

我已经使用 gcc -fpie test.c 编译了一个简单的 hello world c 代码,现在使用 objdump 查看二进制文件:

Disassembly of section __TEXT,__text:
__text:
100000f40: 55 pushq %rbp
100000f41: 48 89 e5 movq %rsp, %rbp
100000f44: 48 83 ec 10 subq $16, %rsp
100000f48: 89 7d fc movl %edi, -4(%rbp)
100000f4b: 8b 75 fc movl -4(%rbp), %esi
100000f4e: 48 8d 3d 5d 00 00 00 leaq 93(%rip), %rdi
100000f55: b0 00 movb $0, %al
...

考虑到我已经使用 -fpie 进行了编译,这些虚拟(运行时)地址是吗?如果代码与位置无关,它们的用途是什么。

如果我删除fpie,我确实会在左侧得到相同的地址,并且我假设它们是虚拟地址,这些指令将在其中加载以正确?

最佳答案

在 PIE(位置无关可执行文件)中,这些“地址”实际上只是程序基虚拟地址的相对偏移量。当程序启动时,它会被内核加载器加载到内存中的某个0x<base_addr>处。 ,还有你的__text本例中的部分将位于 0x<base_addr> + 0x100000f40 .

请注意,如果您启用了 ASLR(地址空间布局随机化)(在任何现代系统上默认情况下都是启用的),则每次执行时基虚拟地址都会发生变化。

关于c - 二进制文件上 objdump 输出左侧的地址是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57692438/

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