Assembly 为什么汇编器喜欢气体输出而不仅仅是二进制?

Assembly 为什么汇编器喜欢气体输出而不仅仅是二进制?,assembly,executable,gnu-assembler,Assembly,Executable,Gnu Assembler,根据大英百科全书,汇编语言是 主要是特定计算机机器语言的符号等价物 如果这是真的,为什么汇编器喜欢带头的GAS输出文件 我确信ELF/Mach-O/PE头不是“机器语言” 那么,为什么汇编程序不直接汇编汇编语言并将二进制文件的格式设置留给链接器呢?问题是机器直接运行汇编,但操作系统必须为二进制文件设置一个执行位置。这就是为什么有ELF头这样的东西。你的操作系统需要知道代码在哪里,BSS部分,在哪里加载数据,等等。。。。如果没有这些信息,操作系统就无法正确加载它,如果您只给它原始的程序集 如果你有

根据大英百科全书,汇编语言是

主要是特定计算机机器语言的符号等价物

如果这是真的,为什么汇编器喜欢带头的GAS输出文件

我确信ELF/Mach-O/PE头不是“机器语言”


那么,为什么汇编程序不直接汇编汇编语言并将二进制文件的格式设置留给链接器呢?

问题是机器直接运行汇编,但操作系统必须为二进制文件设置一个执行位置。这就是为什么有ELF头这样的东西。你的操作系统需要知道代码在哪里,BSS部分,在哪里加载数据,等等。。。。如果没有这些信息,操作系统就无法正确加载它,如果您只给它原始的程序集


如果你有内联数据的汇编代码(编码到指令中),那么你可以说头是不必要的,但很少是这样。

为什么不能在链接阶段添加头?不管这是什么,都不是汇编器。@Hawken链接器也需要标题信息,如果不是的话,它不知道哪些部分在哪里。但这不是汇编器的责任吗?将节数据保存在一个单独的文件中不是更有意义吗?@Hawken这样做只会使事情变得比需要的大得多。在文件中对数据进行编码非常简单,并且使加载更加简单。想象一下,必须找到相应的文件才能找到它的元数据头。对我来说,这听起来更容易出错,而且实现起来更麻烦,没有任何好处。如果我没有弄错的话,nasm会输出这两种格式,不管怎样,从你的角度看,它确实看起来很奇怪,但试着用其他方式实现它:)