从零开始,学习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行有一个分隔。
有一个工具可以帮到你,它的名字叫做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行有一个分隔。
相关文章推荐
- 从零开始,学习windows编程外篇(1)--分析lib文件
- 从零开始,学习windows编程(6)--改换entry,link错误的简单分析
- 从零开始,学习windows编程(6)--改换entry,link错误的简单分析
- 从零开始,学习windows编程(5)--修改入口不为mainCRTStartup
- 从零开始,重新学习windows编程(1)--开篇
- 从零开始,学习windows编程(7)--不使用CRT库的程序
- 从零开始,学习windows编程(8)--自己动手,编译CRT
- 从零开始,学习windows编程(9)-- 字符编码以及国际化(1)
- 从零开始,学习windows编程(9)-- 字符编码以及国际化(1)
- 从零开始,重新学习windows编程(2)--环境准备,不用IDE编写程序
- 从零开始,学习windows编程(4)--从libc.lib开始
- 从零开始学习音视频编程技术(35) windows下编译并调试ffmpeg
- 二. MFC框架程序分析--Windows编程课程学习笔记
- 从零开始,学习windows编程(7)--不使用CRT库的程序
- 从零开始,重新学习windows编程(2)--环境准备,不用IDE编写程序
- 从零开始,学习windows编程(3)—hello.c的疑惑
- 从零开始,重新学习windows编程(2)--环境准备,不用IDE编写程序
- 从零开始,学习windows编程(8)--自己动手,编译CRT
- 从零开始,学习windows编程(3)—hello.c的疑惑
- 从零开始,学习windows编程(4)--从libc.lib开始