本文的主要目的是介紹在彙編調試的時候遇到LINK : fatal error LNK1104: cannot open file "\masm32\lib\kernel32.lib" 錯誤的情況.
VKDebug調試工具是Masm32開發包中附帶的一個調試工具,在Masm32程序中做輸出調試是很方便的。
使用VKDebug很簡單,只需像下面這樣將debug.inc、debug.lib包含到程序中就可以了:
include debug.inc includelib debug.lib
這裏要注意的是:VKDebug中的調試宏用到了Windows.inc頭文件中定義的常量,以及使用了一些Kernel32.dll和Masm32庫中的函數,因此必須在包含debug.inc和debug.lib之前包含windows.inc, kernel32.inc, kernel32.lib, masm32.inc, masm32.lib, 然後就可以在程序中使用debug.inc中的調試宏了。各個調試宏的具體用可以參考VKDebug手冊,這裏說兩點需要注意的地方:
1、在程序中可以使用 DBGWIN_DEBUG_ON 來移除調試信息,使用 DBGWIN_EXT_INFO 來打印文件名和行號,使用方法如下:
DBGWIN_DEBUG_ON = 1 ;表示在程序中包含調試信息,0則程序正常編譯爲發行版程序,不包含調試信息。 DBGWIN_EXT_INFO = 1 ;表示在調試的過程中輸出擴展信息,其實就是多輸出所調試的文件名和調試宏所在的行號
2、使用VKDebug之後程序鏈接出現 LINK : fatal error LNK1104: cannot open file "\masm32\lib\kernel32.lib" 的錯誤:
這個問題是由於debug.inc和debug.lib本身引起的庫路徑問題,不管你使用Makefile或Radasm來組織編譯你的程序,解決這個問題的辦法是確保你編譯的源文件或者工程所在的邏輯驅動器的根目錄下有Masm32開發包!比如:你的源文件或者整個工程在D:\Project\目錄下,那麼就將Masm32開發包拷貝到D:\盤根目錄,就可以解決了。
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include masm32.inc
include debug.inc ;這個最好放到最後
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.code
Sum proc num1:dword,num2:dword,num3:dword
mov eax,num1
add eax,num2
add eax,num3
ret
Sum endp
main proc
invoke Sum,11,22,33
PrintDec eax
;打印十進制的數,具體見debug.inc(可在masm32/include目錄下找到該文件)
ret
main endp
end main