【发布时间】:2016-03-12 03:30:36
【问题描述】:
我要编写我的第一个编译器(好吧...大部分工作是通过使用 ANTLR 完成的,但仍然需要努力)...我已经做了以下事情:
- 为非常非常简单的计算实现了一个工作解释器(+、-、*、/、^ - 当然具有适当的优先级,这并不难实现)
- 创建了一个基本的汇编代码发射器(这实际上比编写解释器更容易,因为我使用了一种相当简单的基于“堆栈”的方法来处理计算 - 例如:“push var1, push var2, add” - 这可以然后很容易转换成简单的 mov / add 指令
- 能够汇编为 .exe(使用 ml64)并执行生成的可执行文件
现在我的问题是 - 如果我想自己创建 COFF 目标文件,如何在库/其他目标文件中引用外部符号?
我的意思是,例如(如果我想调用 printf),当我在 ml64 中执行此操作时,它的工作方式如下:
lea rcx, "address of string"
call printf
但是我究竟应该在 COFF 文件中写入什么而不是“printf”?
其他一切都不是很难实现,但我完全不知道如何去引用库/其他目标文件......嗯......
编辑:固定格式(抱歉)+ 说明
【问题讨论】:
标签: compiler-construction language-agnostic coff