2013-03-20 2 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

+1

'WriteConsole'에 넘겨주는 매개 변수가 잘못되었습니다. 첫 번째 매개 변수는 콘솔 출력 버퍼의 핸들이어야하며 네 번째 매개 변수는 쓰여진 문자 수 (값을 전달하는)에 대한 포인터 여야합니다. – user786653

+0

이 행을'WriteConsole, STD_OUTPUT_HANDLE, addr szMsg, nNumToWrite, addr numwritten, NULL '이라고 바꾸지 만 기쁨은 없습니다. – mring

답변

1

콘솔 프로그램 또는 GUI 프로그램으로 연결하고 있습니까? 이것은 Win32에서 실행 파일의 속성입니다.

+0

WinAsm을 사용하고 있습니다. 나는 프로젝트를 만들 때 표준 EXE로 프로젝트를 가지고 있었다. WinAsm에서 새 프로젝트를 만들고 프로젝트 유형으로 Console Application을 선택하고 동일한 코드로 빌드하여 동일한 결과를 얻으려고했습니다. – mring

관련 문제