2016-07-19 127 views
0

我寫在彙編語言一個簡單的程序,這將簡單地顯示在窗口消息框中7 32位錯誤而聯彙編代碼

.386 
.model flat, stdcall 
option casemap :none 

extrn [email protected] : PROC 
extrn [email protected] : PROC 

.data 
    HelloWorld db "Welcome to SecurityTube.net!", 0 
    MsgTitle db "First MessageBox", 0 

.code 
start: 
    mov eax, 0 
    push eax 
    lea ebx, MsgTitle 
    push ebx 
    lea ebx, HelloWorld 
    push ebx 
    push eax 
    call [email protected] 
    push eax 
    call [email protected] 
end start 

我使用的彙編和連接

ml /c /coff helloworld.asm 
link /subsystem:windows /defaultlib:kernel32.lib /defaultlib:user32.lib helloworld.obj 

以下命令程序完美組裝。但是,雖然鏈接,我得到這個錯誤:

Microsoft (R) Incremental Linker Version 5.12.8078 
Copyright (C) Microsoft Corp 1992-1998. All rights reserved. 

LINK : fatal error LNK1104: cannot open file "kernel32.lib" 

爲什麼我得到這個錯誤,以及如何減輕它?

+0

您需要指定庫路徑。 – IInspectable

+0

我該如何設置它? – Rob

+2

[Microsoft宏彙編程序參考](https://msdn.microsoft.com/en-us/library/afzk3475.aspx)是一個很好的開始。 – IInspectable

回答

3

你要找的命令是:

ml.exe helloworld.asm 
    /coff 
    /link 
     /subsystem:windows 
     /defaultlib:kernel32.lib 
     /defaultlib:user32.lib 
     /libpath:C:\...somewhere... 
     helloworld.obj 

注意,而不是運行ml先用/c開關(這僅裝配不連接),然後運行link,我剛剛將它們組合到一個命令行中。這將運行MASM來組裝代碼,然後立即鏈接它。

魔術醬是/link開關,它將每個參數後的傳遞給鏈接器。

注意您沒有的其他新開關:/libpath。這是告訴鏈接器可以找到LIB文件的地方。它們是Windows SDK的一部分,因此您需要在硬盤上找到該目錄,並將該路徑替換爲C:\...somewhere...。確切的位置取決於您安裝的SDK版本以及安裝方式(單獨或作爲Visual Studio的一部分)。如果您沒有SDK,請下載它here for Windows 10for earlier versions。 (請注意,最新版本已足夠;不需要下載所有版本,它支持多重定位。)

MASM的文檔全部爲available online,其中包括command line options的全面列表。鏈接器也是一樣的;其options are here


一個更簡單的解決辦法是打開Visual Studio命令提示符,做所有的組裝,並從那裏連接。這實際上運行了一個批處理文件,爲您設置環境,以便您不必擔心指定所有必需的SDK文件(頭文件,庫文件等)的路徑。您可以在開始菜單中找到該文件,或者手動運行:

C:\Program Files (x86)\Microsoft Visual Studio x.x\VC\bin\vcvars32.bat 

設置32位構建環境。

1

您是否檢查Visual Studio的目錄結構並查找$(WindowsSdkDir)\lib以查看它們是否存在?
如果沒有安裝http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx

+0

我正在安裝它,但什麼是Windows SDK和爲什麼要使用它? (僅供參考) – Rob

+0

我從此鏈接安裝在Windows 7中(https://www.microsoft.com/en-in/download/details.aspx?id=8279)。它沒有工作。我必須設置任何環境路徑嗎?還是其他什麼? – Rob

+0

Kernel.Lib和USER32.LIB存在於C:\ Program Files文件\微軟的SDK \的Windows \ V7.1 \ Lib文件 – Rob