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

时间:2013-12-29 19:01:57

标签: c unix compiler-construction executable machine-code

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

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

1 个答案:

答案 0 :(得分:1)

你写的很好,你正处于编译器的最后一步......

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

正如之前在评论中提到的那样,你可以:

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

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

    • 首先,您需要学习可执行文件格式
    • 为其创建模板
    • 第二,你需要编写自己的asm编译器
    • 不需要完整的指令集
    • 只需要将所有必要的东西翻译成机器代码
    • 然后将您的语言编译为机器代码
    • 并使用代码和所有必要数据填充模板
    • 将其保存为a.out ...
  3. 语言运行时引擎:

    • 它类似于您的程序的操作系统
    • 您的语言支持的子程序集
    • 类似终端/真实操作系统和您的程序之间的接口
    • 内存/资源管理
    • 处理本地/全局/静态变量
    • 堆/堆栈......
    • 线程
    • 调试
    • 还有更多......