【发布时间】:2016-05-03 01:59:09
【问题描述】:
我正在编写一个非常小的 x86 汇编器,它当前输出十六进制(或二进制,更改它是微不足道的)机器代码。如何将此十六进制/二进制文件写入我可以实际执行的文件中?
对于一个简单的输入,例如:
mov ax, #1
ret
汇编器会输出:
66b80100
c3
【问题讨论】:
-
您需要了解您使用的平台所需的可执行文件格式的结构,并以这种格式创建文件。它将包含的内容之一是您组装的机器指令。
-
您还有另一个主要选择:您是编写目标文件并将它们与现有链接器链接,还是编写自己的链接器(或将链接器的功能集成到汇编器中,可能将程序限制为单个源文件?)
-
更改汇编器的输出,使其输出类似于
DB 066h, 0b8h, 001h, 000h或.byte 0x66, 0xb8, 0x01, 0x00的内容,然后使用 MASM 或 GNU 汇编器等汇编器进行汇编,然后链接生成的目标文件以创建可执行文件. -
@RossRidge 该标题是什么文件格式?
-
参见this article / tutorial 了解如何制作微型可执行文件。目标不同,但它引入了可执行文件结构的概念。在您的情况下,DOS COM 文件几乎是(或字面意思?)平面二进制文件,没有加载到内存中并运行的元数据。所有其他可执行文件格式都有标题。
标签: assembly compilation compiler-construction linker x86