2013-03-20 30 views
2

我正在嘗試使用Win32 API在程序集中編寫一個簡單的命令行程序。我寫了以下內容,編譯並鏈接了零錯誤或警告,並從命令行啓動它,但在命令提示符處沒有任何內容出現。任何人都可以看到什麼是錯的,或者什麼會讓它說「Hello World!」在命令行?該程序:Win32 ASM程序不向命令行輸出任何內容

; Block 1 
.386 
.model flat,stdcall 
option casemap:none 

; Block 2 
include windows.inc 
include user32.inc 
includelib user32.lib 
include kernel32.inc 
includelib kernel32.lib 

; Block 3 
.data 
szMsg db "Hello World!",0 
nNumToWrite dd 12 

; Block 4 
.data? 
numwritten dd ? 
CommandLine LPSTR ? 

; Block 5 
.code 
start: 
invoke GetCommandLine 
mov CommandLine,eax 
invoke WriteConsole,CommandLine,addr szMsg,nNumToWrite,numwritten,NULL 
xor eax,eax 
invoke ExitProcess,eax 
end start 
+1

你試過調試嗎?你發現了什麼? – tenfour 2013-03-20 16:45:35

+1

你傳遞給'WriteConsole'的參數是錯誤的。第一個參數應該是控制檯輸出緩衝區的句柄,第四個參數應該是指向寫入的字符數量的指針(您正在傳遞值)。 – user786653 2013-03-20 17:02:29

+0

我將該行更改爲'調用WriteConsole,STD_OUTPUT_HANDLE,addr szMsg,nNumToWrite,addr numwritten,NULL'但仍然沒有快樂。 – mring 2013-03-20 17:19:30

回答

1

您是否將其作爲控制檯程序或GUI程序鏈接?這是Win32中可執行文件的屬性。

+0

我正在使用WinAsm。創建項目時,我確實將該項目作爲標準EXE。我嘗試在WinAsm中創建一個新項目,並選擇Console Application作爲項目類型並使用相同的代碼構建,以獲得相同的結果。 – mring 2013-03-20 18:18:41