▶ 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 |