您的位置:首页 > 编程语言

从零开始,学习windows编程外篇(1)--分析lib文件

2013-09-24 09:06 260 查看
大家都知道,lib文件是很多obj文件合在一起得到的一个静态库文件。那某一个特定的lib文件,到底是由哪些obj文件组成的呢?

有一个工具可以帮到你,它的名字叫做lib.exe。

还是用LIBC.LIB来举例。我电脑上这个lib文件的位置是在“d:\Program Files\Microsoft Visual Studio\VC98\Lib\LIBC.LIB”,进入这个目录。

所有的lib使用选项:

d:\Program Files\Microsoft Visual Studio\VC98\Lib>lib /?

Microsoft (R) Library Manager Version 6.00.8447

Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
usage: LIB [options] [files]
options:
/CONVERT

/DEBUGTYPE:CV

/DEF[:filename]

/EXPORT:symbol

/EXTRACT:membername

/INCLUDE:symbol

/LIBPATH:dir

/LINK50COMPAT

/LIST[:filename]

/MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4}

/NAME:filename

/NODEFAULTLIB[:library]

/NOLOGO

/OUT:filename

/REMOVE:membername

/SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]

/VERBOSE

可以使用list来显示其中的obj文件。

d:\Program Files\Microsoft Visual Studio\VC98\Lib>lib /list libc.lib

整个列表比较长,所以我又做了个重定向,将输入放到log文件中了。

d:\Program Files\Microsoft Visual Studio\VC98\Lib>lib /list libc.lib > d:\test\libc.log

最终输出有600多行,所以折叠起来,大家可以展开看。

View
Code

从这里也可以看出,所有合在里面的obj文件,都是在/build/intel/st_obj/目录下面的。也就验证了libc.lib是给单线程静态库使用的说法。

另外,使用lib命令还可以将需要的obj文件从lib文件中分离出来。这里解压的时候,最好是先将lib文件拷贝到一个临时目录下,不要放在VC原来的lib目录下操作。我这里放在d:\test目录进行。目标是解出一个crt0.obj文件。

D:\test>lib /EXTRACT:build\intel\st_obj\crt0.obj libc.lib

Microsoft (R) Library Manager Version 6.00.8447

Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

之后,就可以用dumpbin来观察解出来的obj文件了。

D:\test>dumpbin crt0.obj

Microsoft (R) COFF Binary File Dumper Version 6.00.8447

Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Dump of file crt0.obj
File Type: COFF OBJECT
Summary
C .bss

8 .data

20 .debug$F

C .rdata

128 .text

这里使用/all选项出来的内容过多,大家可以自己去看输出,这里就不贴出来了。只是提供一个思路和方法。

另外,使用dumpbin命令,还可以看到lib文件中的函数,具体可以用linkermember选项。

D:\test>dumpbin /linkermember libc.lib>func.log

同样因为内容过多,大家还是自己去看,可以找一下_mainCRTStartup。

注意:

第8行,第1850行,第4334行有一个分隔。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: