Microsoft Visual Studio导入库的格式

Format of Microsoft Visual Studio import library

本文关键字:格式 导入 Visual Studio Microsoft      更新时间:2023-10-16

众所周知,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对象(尽管它包含386个体系结构签名0x14c Coff(。我找不到有关这些导入对象格式的任何文档。有人知道这种格式吗?

可能是非正式规格?

可能是可以处理此格式的一些源代码?

这是所谓的Microsoft"简短导入"目的。基本上,它由20个字节标头组成(与常规COFF标头相同(,其次是两个零终止字符串:导入符号名称和DLL名称。

"简短导入"标题与前四个签名字节中的常规COFF标题不同:0x00 0x00 0xFF 0xFF(没有常规的COFF可以从此开始,因为它将读取为"未知机器,65535个部分","是胡说八道(。

(。 >

"简短导入"格式标题在这里充分描述:MSDN PE格式。

因此,在上面的示例中,我们有:

0x00 0x00 0xff 0xff->"简短导入"签名
0x00 0x00->版本0(未使用(
0x4c 0x01->机器i386
0x39 0xe9 0x80 0x55->时间/日期邮票(2015年6月17日,6:27:53 UTC(
0x26 0x00 0x00 0x00->标头(38个字节(之后的字符串大小
0x93 0x00 - >序数/提示(147(
0x08 0x00 - >位字段("代码">