1. 程式人生 > >obj檔案打包為靜態庫,靜態庫中抽取obj檔案

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後,會有如下顯示:


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.

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