天天看點

obj檔案打包為靜态庫,靜态庫中抽取obj檔案

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檔案

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檔案

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

繼續閱讀