본문 바로가기
공부,일/어셈블리

튜토리얼 2(메세지 박스 만들기)

by fromnothing1 2021. 8. 15.

- 메세지 박스 사용하기 - 

 

 

1. include 사용 방법 (masm32 폴더안의 여러 라이브러리를 사용할수 있다. ) 

 

include \masm32\include\windows.inc 

include \masm32\include\kernel32.inc 

includelib \masm32\lib\kernel32.lib 

 

windows.inc  를 include 하면 에러가 나는데 winextra.inc 파일의 밑의 폴더에서 

위의 대괄호 지우면 정상작동 한다 .

 

2.프로토 타입 

 

함수의 프로토 타입을 먼저 선언해야지 함수가 늦게 선언되더라도 코드에는 아무 문제 없다. 

 

FunctionName PROTO [ParameterName]:DataType,[ParameterName]:DataType,...
(프로토 타입 선언 방법)

ex) ExitProcess proto uExitCode:DWORD 

- eixti() 함수와 동일 

 

- 어셈블리 언어에서 함수를 부를수 있는 방법은 call 과 invoke 가 존재 하는데 call 의경우 함수에 보내는 매개변수의 갯수가 다르더라도 인식하지 못하지만 invoke 의경우 인식할 수 있어서 

invoke 함수의 사용을 권장한다. 

하지만 이러한 기능을 제공하기 위해서는 invoke 로 함수를 불러네기 전에 함수의 프로토 타입을 먼저 정의 해야한다. 

 

3. include vs includelib 

include 는 미리 만들어진 라이브러리를 가져온다. 

하지만 includelib 은 사용하고 있는 포함 라이브러리가 무엇인지 알려줍니다. 

 

 

4. 코드 해설

.386 
.model flat,stdcall 
option casemap:none ; 어셈블러가 대소문자를 구분할수 있게 해준다. 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\user32.inc 
includelib \masm32\lib\user32.lib
.data 
MsgBoxCaption  db "Iczelion Tutorial No.2",0 
MsgBoxText       db "Win32 Assembly is Great!",0
.code 
start: 
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK 
invoke ExitProcess, NULL 
end start

db : 일단 지금은 데이터를 저장하는 명령어라고 생각 

"Iczelion Tutorial No.2",0  문자열의 끝은 항상 0 을 가지고 있어야함 

 

addr: 레벨의 함수 주소를 전단하기 위해서 

 

addr MsgBoxText 는 MsgBoxText 의 주소를 전달한다.

MB_OK  미리 정의된 변수 값으로  OK 메세지 박스 출력 

 

ml.exe 를 이용해서 실행 파일 생성하기 (visual studio 안쓰고)

위의 코드를  main.asm 으로 저장한후 ml.exe 파일이 있는 폴더에 넣는고 실행한다.

cmd 창으로 위의 명령어를 실행해보자 (ml  /c  /coff  /Cp main.asm)

- 명령어 설명 

/c : 어셈블리만 하도록 한다. ( 링크작업을 하지않음) 

/coff  : obj 파일을 COFF 포멧으로 만든다.

/Cp : 식별자의 대소문자를 구별하도록 한다. 

 

 폴더 내에서 main.obj 파일이 생성된것을 볼수 있다. 

 

바로 다음으로 이 파일을 link 해보자 

link /SUBSYSTEM:WINDOWS  /LIBPATH:c:\masm32\lib  main.obj

- 명령어 설명 

/SUBSYSTEM:WINDOWS : 실행 순서를 알려줌 

/LIBPATH:c:\masm32\lib : link 가 포함시켜야 할 라이브러리들이 어디있는지 알려준다. 

 

 

위와 같이 main.exe 실행 파일이 생성 되었다. 더블클릭하면 메세지 박스가 뜬다 .

 

'공부,일 > 어셈블리' 카테고리의 다른 글

listing 파일 만들기  (0) 2021.08.16
튜토리얼 3 simple window  (0) 2021.08.16
튜토리얼 1  (0) 2021.08.13
__cdecl vs __stdcall  (0) 2021.08.13
masm32 기본 다지기 튜토듀얼 블로그  (0) 2021.08.13

댓글