从头开始创建a.out可执行文件

5 c unix compiler-construction executable machine-code

我已经从头开始创建了一种编程语言.我已经构建了一个编译器,它处理输入文件中的代码并将其转换为标记,并检查标记的顺序是否正确.我正处于编译器的最后一步:输出/可执行文件.我想创建一个可以在终端中运行的输出.我想创建一个a.out输出,但我能找到的唯一资源是来自nasm,这对我没有帮助.

所以我的问题是,如何创建一个可以在终端中运行的a.out文件(unix可执行文件)?

Spe*_*tre 1

好吧,你写的是你正在编译器的最后一步......

  • 你确定吗 ?
  • 它是什么类型的语言?
  • 例如,像 Pascal/C/C++ 这样的非 asm 语言需要引擎

正如之前在评论中提到的,您可以:

  1. 使用应用程序中现有的汇编器编译器/链接器

    • 这是最简单的方法
    • 您需要在 asm 中创建语言运行时引擎代码
    • 然后将你的源代码编译为asm
    • 将这两个来源放在一起
    • 并调用编译器/链接器
    • 但你可以忘记断点和跟踪......
    • 如果您不喜欢 asm,还有 C/C++ 编译器/链接器
  2. 创建自己的编译器链接器

    • 首先你需要研究可执行文件格式
    • 为其创建一个模板
    • 其次你需要编写自己的asm编译器
    • 不需要完整的指令集
    • 只是拥有将您的语言翻译为机器代码所需的一切
    • 然后将你的语言编译为机器代码
    • 并用代码和所有必要的数据填充模板
    • 将其另存为 a.out ...

语言运行时引擎:

  • 它就像你的程序的操作系统
  • 您的语言支持的子例程集
  • 就像终端/真实操作系统和你的程序之间的接口
  • 内存/资源管理
  • 处理局部/全局/静态变量
  • 堆/栈...
  • 线程
  • 调试
  • 以及更多 ...