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