티스토리 뷰
32bit MASM 환경구성
우선 MASM32를 설치하자. 다음 링크에서 다운받고 실행하면된다.
추가로 설정경로만 정해준 뒤 그냥 확인을 쭈욱 누르면 설치경로에 masm32라는 폴더가 생기는 것을 확인할 수 있다. 이러면 설치가 완료된 것이다.
해당 디렉토리의 bin폴더에 있는 link.exe 및 ml.exe 실행파일을 asm 파일을 obj 파일로, 또 exe 파일로 만드는데 있어서 자주 사용할 예정이니 환경변수를 설정해 cmd에서 편하게 사용하자.
MASM32 의 경우 그냥 notepad++ 에서 주로 작업을 진행했으며 특별한 건 없다.
위와 같이 작성된 코드를 실행파일로 만들어 실행하는 과정을 살펴보자.
우선 ml 명령어를 사용해 해당 어셈블리 파일을 목적파일(OBJ)로 만든다.
이후 목적파일을 link 명령어를 사용해 링킹과정을 거쳐 실행파일(EXE)로 만든다.
현재 경로에 가보면 목적파일과 실행파일이 모두 존재하는 것을 확인할 수 있다.
해당 실행파일을 실행하면 정상적으로 실행되는 것을 확인할 수 있다.
64bit MASM 환경구성
MASM32는 64bit를 지원하지 않는다. 따라서 Microsoft사에서 제공하는 ml64를 이용할 수 있지만, JWasm이라는 컴파일러를 통해 MASM32의 대부분의 문법을 거의 사용할 수 있다.
1. Platform SDK를 설치한다.
https://www.microsoft.com/en-us/download/details.aspx?id=6510
해당 링크에 들어가서 AMD64에 해당하는 설치파일을 다운로드 받고 설치를 진행하면 된다.
2. JWasm를 설치한다.
https://github.com/JWasm/JWasm
위 URL중 원하는 곳에서 다운로드 받으면 된다. 별다른 설치는 필요없지만 해당 설치폴더에 존재하는 jwasm.exe 실행파일을 컴파일할 때 자주 사용하기 때문에 환경변수로 설정해둔다.
3. 64bit용 include 파일을 받는다.
https://sourceforge.net/projects/wininc/files/WinInc208.zip/download
기존의 windows.inc를 64bit로 컨버팅한 include 모음이다.
마찬가지로 notepad++ 를 사용해서 간단하게 코드를 작성했다.
includelib을 할때 그냥 lib명을 적어주면 환경변수를 읽어와서 불러오나보다 !!
( 개인이 만든 DLL을 할 때에는 절대경로를 작성해야한다 ! )
MASM32를 컴파일때 사용했던 ml 명령어를 대신하는 jwasm 명령어를 통해 어셈블리 파일을 목적파일(OBJ)로 컴파일한다. 해당 경로에 목적파일이 생성된 것을 확인할 수 있다.
Microsoft에서 다운로드 받았던 SDK의 경로들을 사용해 위 명령어를 사용하면 목적파일(OBJ)을 링킹과정을 통해 실행파일(EXE)로 만들 수 있다.
해당 경로에 목적파일과 실행파일이 생성된 것을 확인할 수 있다.
정상적으로 프로그램이 실행된 것을 확인할 수 있다.
DLL 파일 생성
어셈블리 파일을 목적파일로 만드는 과정은 기본 실행파일때와 동일하다.
그러나 목적파일을 실행파일로 만드는 과정에서 명령어가 약간 차이가 있다.
/subsystem:windows /dll /DEF:dll.def 옵션이 추가된다.
이 때 DEF 옵션의 dll.def 파일은 내가 해당 경로에 생성해줘야하는 파일이다.
우선 .bss SHARED는 DLL에서 사용하는 .data? 섹션에 존재하는 초기화 되지 않은 변수값들에 대해 다른 실행파일에서 접근 가능하도록 공유해주는 것이다.
LIBRARY mydll64는 생성되는 DLL명을 지정해주는 것이다.
EXPORTS 로 나열된 것들은 해당 DLL에서 Export해주는 함수명들이다.
이렇게 컴파일을 진행하고나면 exp, lib, dll 세 가지 파일이 생성된다.
'Reversing > Assembly' 카테고리의 다른 글
[Assembly] 순서없이 배우는 MIPS 개념정리. (1) | 2020.04.08 |
---|---|
[MASM] MASM으로 구현하는 32Bit Trampoline API Hooking (0) | 2020.03.16 |
[MASM] MASM으로 작성한 SetWindowsHookEx을 이용한 DLL Injection. (0) | 2020.03.11 |
[Assembly] 순서없이 막 익히는 ARM Assembly (0) | 2020.02.26 |
[Reversing] 어셈블리 정리(1) (0) | 2019.05.13 |