所以我一直在学习汇编,并且了解了source.s -> 汇编器 -> source.o -> 链接器 -> 可执行文件的过程。但我一直想知道,是否没有其他目标文件需要执行我的程序。
为什么我不能只运行目标文件?
例如:像这样简单的事情
global _start
section .text
_start:
mov rax, 1
mov rbx, 0
int 0x80
即使目标文件理论上应该包含运行所需的所有代码,仍然需要链接。
最佳答案
可执行文件和可链接格式之间的区别在 Executable and Linkable Format (ELF) 中描述。 .
ELF 文件以文件头开头,其成员 Elf32_Ehdr.e_type
通知操作系统加载程序该文件是可执行文件 (e_type=2
) 还是可链接对象 ( >e_type=1
)。
可执行文件还需要名为程序头的结构Elf32_Phdr
,它告诉操作系统加载器每个部分应在虚拟地址空间中的何处链接和重定位。普通汇编器不产生程序头。
关于assembly - 是什么阻止您单独运行目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71390466/