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