我要编写我的第一个编译器(好吧......大部分工作是通过使用ANTLR完成的,但仍然需要付出努力)......我已经做了以下事情:
现在我的问题是 - 如果我想自己创建COFF目标文件,我如何引用库/其他目标文件中的外部符号?
我的意思是,例如(如果我想调用printf)就像这样,当我在ml64中这样做时:
lea rcx, "address of string"
call printf
但究竟我写入COFF文件而不是“printf”?
其他所有内容都难以实现,但我完全不知道如何引用库/其他目标文件......嗯...
编辑:修复格式(抱歉)+澄清
答案 0 :(得分:2)
而不是printf,你写了四次0x00
,i。即调用本身被组装为0xe8 0x00 0x00 0x00 0x00
。此外,您需要编写类型为DISP32的重定位记录,其偏移量指向第一个0x00
,值指向名称为printf的符号条目。 Wikipedia有一些指向详细描述COFF格式的文档的链接。