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文件,运行上面命令得到如下输出:
作为对比将该lib拖进ida后,会有如下显示:
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文件。
示例及结果截图如下:
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