본문 바로가기

프로그래밍/시스템

MASM 프로그래밍

반응형

▶ MASM(Microsoft Macro Assembler) 

- 마이크로소프트에서 제공하고 있는 MS-DOS 및 윈도우용 메크로 어셈블러다.

     

 

 

VisualStudio2017 기준으로 MASM 프로젝트를 만드는 순서는 다음과 같다.

 

프로젝트 파일 생성 -> 프로젝트 속성 -> 빌드 종속성[사용자 지정빌드] -> 사용자 지정 파일 MASM 선택 -> 새 항목 추가 -> ASM 파일 생성 -> 코드 작성 

 

 

이제 코드를 작성해본다. 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.MODEL flat , stdcall
ExitProcess PROTO , dwExitCode:DWORD
MessageBoxA PROTO , hwnd:DWORD , lpText:PTR BYTE,
    lpCaption:PTR BYTE , uType:DWORD
 
.DATA
caption BYTE "32-bit hello!",0
message BYTE "Hello world!",0
 
.CODE
start PROC
 
    push 0
    push OFFSET  caption
    push message caption
    push 0
    call MessageBoxA
    
    push 0
    call ExitProcess
 
start ENDP
END start
cs

 

위 MASM 코드는 윈도우 메세지 박스를 띄우는 코드이다. 

 

 

작성이 완료되면 F5를 눌러 빌드 한다. 

 


여기까지의 과정을 사진으로 표현하면 다음과 같다.

 

---------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------

 

위에서 작성한 MASM 코드를 빌드 하면 다음 사진과 같이 하위 시스템을 유추할 수 없어서 

정의하라고 오류가 뜬다. 

 

 

해결 방법은 해당 프로젝트의 속성에 들어가서

링커 -> 시스템 -> 하위 시스템 으로 이동하여 콘솔 또는 창(windows)을 선택한다. 

만약 콘솔을 선택하게 되면 검은 화면의 콘솔 창 , 창(WIN)을 선택하면 윈도우 박스 형태로 

코드의 결과물이 나오게 된다.

 

 

---------------------------------------------------------------------------------------------------------

 

 

프로젝트 셋팅 모드에는 Release와 Debug 모드가 있다.

 

Debug 모드는 디버깅 하기 위한 정보들을 가지고 있어서 용량이 Release 모드보다 크고 , 

주로 개발하는 단계에서 쓰인다.

Release 모드는 프로그램 개발을 종료하고 배포 할 때 쓰인다. 

 

 

방금 전 코드는 debug 모드로 셋팅한 것이며 , 이제는 Release모드로 바꾸고 빌드 해 보겠다.

 

 

하지만 다음 사진처럼 SAFESEH 이미지 관련 오류가 발생되면서 빌드 되지 않을 수 있다.

 

 

따라서 위와 같은 오류가 발생하면 프로젝트 속성페이지에 링커 -> 고급으로 들어가서 

이미지에 안전한 예외 처리기 포함을 NO로 설정하고 재빌드한다.

 

 

 

위 설정을 완료하고 빌드하면 성공적으로 빌드된다고 출력되지만 

다음과 같은 링크 메시지가 뜨게된다.

 

"/LTCG를 지정했지만 코드를 생성할 필요가 없습니다.

명령줄에서 /LTCG를 제거하면 링커 성능이 향상됩니다."

 

 

 

위 메시지를 안뜨게 하려면 링커 -> 최적화에 링크 타임 코드 생성을 기본값으로 설정한다.

 

 


이로써 VisualStudio에 MASM을 실행하기 위한 대략적인 환경설정은 끝났다.

 

 

다음은 MASM에서 디버깅 하는 방법이다.


 F9  브레이크 포인트 설정
 F10  줄단위 실행
 F11  코드 단위 실행(내부 진입)

 

 

실행하고자 하는 라인에서 F9를 누르면 해당 라인 옆에 둥그런 빨간색 모양이 생기는데 

이는 브레이크 중단점이 삽입된 것을 의미한다.

그 후 F5를 눌러 디버깅한다.

 

F10을 누르면 줄 단위로 실행하여 실행 하는 위치를 나타내는 노란색 화살표가 밑으로 

한칸씩 내려가게 된다.  

만일 반복문을 만났을 때 내부로 진입하려면  F11키를 누르면 된다.

 

Alt+G 또는 마우스 우클릭으로 디스어셈블코드가 있는 메모리 주소로 이동할 수 있다.

 

메모리 주소는 보안상 실행할 때마다 계속 바뀌게 되는데 , 

만약 학습용으로 하는 공부라면 메모리주소가 자주 바뀌면 인지하기 불편해지므로

링커->고급에 임의기준주소라는 항목을 "아니요" 로 설정하면 고정 주소를 갖게된다.

 

 

디버깅을 중지하려면 직접 탭에 들어가서 중지할 수도 있지만 ,

편하게 단축키(Shift + F5)를 사용해서 중지 한다.

 

 

 

반응형

'프로그래밍 > 시스템' 카테고리의 다른 글

C++ Qt 간단한 로그인 폼 만들기  (0) 2018.03.12
jquery 강제 키 입력 트리거  (0) 2017.12.19
스레드에 대하여  (0) 2017.08.19
[C] _beginthreadex  (0) 2017.08.19
C언어 연산 우선순위  (0) 2017.07.26