前幾天偶爾逛codeproject,發(fā)現(xiàn)了這個(gè)好東東。放在這里分享一下。
原文地址:http://www.codeproject.com/Articles/2752/How-to-create-lib-file-when-you-only-have-dll-and?msg=3572427#xx3572427xx
有時(shí)候你希望在自己的C代碼中調(diào)用別人的一個(gè)DLL,但是又沒有l(wèi)ib文件,就會(huì)很麻煩。由dll文件逆向生成lib文件手工方法網(wǎng)上已經(jīng)有很多介紹了,自己百度一下啊
這個(gè)是將整個(gè)手工方法用makefile來自動(dòng)完成。(btw:makefile真的很強(qiáng)大,專業(yè)程序員都應(yīng)該學(xué)一學(xué))
makefile代碼如下,文本編輯器復(fù)制粘貼后,另存為dll2lib.makefile
.SUFFIXES: .def .dll .lib
.def.lib:
lib /machine:IX86 /nodefaultlib /def:$*.def &
set retval=%? & del $*.exp > NUL & EXIT %retval
.dll.def:
echo LIBRARY $* > $*.def
echo EXPORTS >> $*.def
dumpbin /exports $*.dll | sed -n "s/


. 0


. \([^ ]*\)/ \1/p" >> $*.def
somedllname.lib: somedllname.def
運(yùn)行需要的環(huán)境和工具:
sed.exe可
以從 http://sourceforge.net/projects/unxutils/files/下載,解包后在UnxUtils.zip\usr\local\wbin目錄可以找到
進(jìn)入visual studio 命令行環(huán)境,
把你的dll文件改名為somedllname.dll,記得要把sed.exe放在同一個(gè)目錄下。
運(yùn)行 namke dll2lib.makefile,自動(dòng)生成somedllname.lib和somedllname.exp文件。
注意:這種方法對(duì)于沒有輸出函數(shù)名的dll是無效的。
關(guān)于visual c++名字修飾的詳細(xì)介紹,看這里
http://zh.wikipedia.org/wiki/Visual_C%2B%2B%E5%90%8D%E5%AD%97%E4%BF%AE%E9%A5%B0#.E7.B1.BB.E5.9E.8B.E7.9A.84.E7.BC.96.E7.A0.81.E8.A1.A8.E7.A4.BA