assembly - 是什么阻止您单独运行目标文件?

标签 assembly linker executable elf object-files

所以我一直在学习汇编,并且了解了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/

相关文章:

assembly - 将相同的字节移动到两个不同地址之间的每个地址?

math - 汇编中的算术运算

x86 - 编写简单的 x86 汇编程序的最佳方法是什么?

linker - 移动到 iOS6 我收到了几乎所有外部包的链接器错误

qt - 静态编译 Qt 4.6.2

java - 如何使用相对路径读取可执行jar之外的文本文件

c++ - 将汇编指令翻译成 C++

linker - 将 Racket 程序链接到 Fortran 库

windows-xp - 如何从Windows XP的批处理文件设置处理器关联性?

python - Pyinstaller EXE 的 __file__ 指的是一个 .py 文件