编写 COFF 目标文件...如何引用外部符号

Writing a COFF object file... how to reference external symbols

我要写我的第一个编译器(好吧...大部分工作是使用ANTLR完成的,但仍然需要努力)...我已经做了以下事情:

现在我的问题是 - 如果我想自己创建 COFF 目标文件,我如何在库/其他目标文件中引用外部符号?

我的意思是,例如(如果我想调用 printf)它是这样工作的,当我在 ml64 中这样做时:

lea rcx, "address of string"
call printf

但是我到底应该将什么写入 COFF 文件而不是 "printf"?

其他一切都不是那么难实现,但我完全不知道如何引用库/其他目标文件...嗯...

编辑:固定格式(抱歉)+ 说明

代替 printf,你写了四次 0x00,i。 e.调用本身被组装为 0xe8 0x00 0x00 0x00 0x00。此外,您需要编写一个类型为 DISP32 的重定位记录,偏移量指向第一个 0x00,值指向名称为 printf 的符号条目。 Wikipedia 有一些指向详细描述 COFF 格式的文档的链接。