已知Visual Studio库*.lib文件是一个Unix "ar"存档,其中包含COFF格式的目标模块。但我发现用于导入DLL的库是一系列小块(或存根)的存档,而不是COFF对象。例如,库VS15\lib\ucrt\ucrt.lib。这些块包含函数名称和定义该函数的DLL库的引用。以下是“puts”函数存根的示例(十六进制转储):
00-00-FF-FF-00-00-4C-01-39-E9-80-55-26-00-00-00 ......L.9..U&...
93-00-08-00-5F-70-75-74-73-00-61-70-69-2D-6D-73 “..._puts.api-ms
2D-77-69-6E-2D-63-72-74-2D-73-74-64-69-6F-2D-6C -win-crt-stdio-l
31-2D-31-2D-30-2E-64-6C-6C-00 1-1-0.dll.
这绝对不是COFF对象(尽管它包含特定于COFF的386架构签名0x14C)。我找不到关于这些导入对象格式的任何文档。有人知道这个格式吗?
可能是非官方规范?
可能有一些可以处理此格式的源代码?