0.前言:

尝试制作ida FLIRT签名文件,需要从lib文件中抽取obj文件,于是顺带着把生成lib文件的命令也看了一边。虽然我知道不会有人傻兮兮的放着IDE不用,而用命令行来生成库文件。

1.准备环境:

安装vc++6.0并进入编译器安装目录下"VC98\Bin"子目录,内有Link.exe/Lib.exe等二进制文件。我们将使用这两个文件打包/解包lib库。

2.制作库文件:
命令:link /lib /out:xx.lib *.obj (其中xx.lib是要打包成库的名字,*.obj表示所有的obj)
link /lib /out:mtunes_win32.lib *.obj

3.解压库文件:
3.1.先生成LIST列表文件,可以查看到lib里面的obj列表文件
命令:link -lib -list xx.lib

例如,我生成了一个FLIRT.lib文件,运行上面命令得到如下输出:

C:\studio\link>link -lib -list flirt.lib
Microsoft (R) Library Manager Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

.\Debug\StdAfx.obj
.\Debug\flirt.obj

作为对比将该lib拖进ida后,会有如下显示:

obj文件打包为静态库,静态库中抽取obj文件_vc++6.0

3.2.从lib里解压出某一个obj文件,obj文件名一定是要存在lib里,而且区分大小写
命令:
lib xx.lib /EXTRACT: xxx.obj /OUT: xxx.obj

其中xx.lib为库的名字,xxx.obj是存在xx.lib库中的某个obj文件的全路径,如.\Debug\flirt.obj。虽然能提取obj,但麻烦的是,每次只能提取一个obj文件。

示例及结果截图如下:

C:\studio\link>lib flirt.lib /extract:.\Debug\flirt.obj /out:flirt.obj
Microsoft (R) Library Manager Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

obj文件打包为静态库,静态库中抽取obj文件_microsoft_02


3.3.从lib里删除某一个obj文件


命令:


link -lib xx.lib -remove:yy.obj (其中xx.lib为库的名字,yy.obj是要从xx.lib库中删除的obj文件)


link -lib display.lib -remove:draw_clock.obj