검색결과 리스트
글
Introduction
지난 시간에 약속한대로 이번 시간에는 MASM 을 이용하여 DLL을 만들고, DLL을 이용하는 방법에 대해서 설명하도록 하겠습니다. 물론 Visual Studio 2008 환경에서 설명하도록 하겠습니다.
DLL 만들기
Extern 함수를 추가시키려면 Def 파일을 추가로 작성해 주셔야 합니다.
다시말해 Def 파일이 없으면 dll 은 생성되지만, 외부에서 사용할 수 있는 Export 함수가 만들어지지 않습니다.
Test.asm 코드
Test.Def 코드
Test.Def 안에 LIBRARY는 *.asm 파일명을 적어 주시면 됩니다. 그리고 Exports 에는 말 그대로 Export 시킬 함수이름을 적으면 되죠. 매우 간단하죠? 자, 이제 빌드를 하면 아무 문제없이 DLL 파일이 만들어 집니다. Test.DLL 이면 좋으련만, 아무 생각없이 DllTest.dll 로 만들어 버렸습니다 =_=; 물론 마음에 들지 않으시는 분은 프로젝트 속성에서 output 을 새로 설정해 주시면 됩니다. 전 그냥 rename 하지 않고, 쭉~ 설명 하겠습니다.
빌드 설정
빌드에 앞서 설정해 주어야 할 것들이 있습니다. 그냥 빌드한다면 exe 파일이 만들어지겠죠. C++ 프로젝트에 익숙하신 분들은 별 무리없이 setting 하실 수 있을거라고 생각합니다.
자, 프로젝트 속성에서 Configuration Properties -> General 에 들어가시면 상단 화면처럼 'Configuration Type' 이라는 메뉴가 있습니다. 이곳의 타입을 화면처럼 "Dynamic Library(.dll)"로 변경해 줍니다. 우린 dll을 만들 것이기 때문이죠.
이제 build 를 위한 모든 준비가 끝났습니다. Ctrl + Alt + B 를 눌러서 프로젝트를 Build 하면 별 무리없이 수행 되는 것을 보실 수 있습니다. 그리고 폴더로 이동하면 .dll 파일이 만들어져 있을 것입니다. ^-^
앞에서 만든 DLL을 사용하는 방법에 대해서 설명하도록 하겠습니다. 사실 이것은 MASM 에 대한 이야기라기보다는 Win32에 더 가까울 것입니다. 어려운 부분이 없기 때문에, 따로 설명 드리지 않도록 하겠습니다.
DLL 사용
Test.Def 안에 LIBRARY는 *.asm 파일명을 적어 주시면 됩니다. 그리고 Exports 에는 말 그대로 Export 시킬 함수이름을 적으면 되죠. 매우 간단하죠? 자, 이제 빌드를 하면 아무 문제없이 DLL 파일이 만들어 집니다. Test.DLL 이면 좋으련만, 아무 생각없이 DllTest.dll 로 만들어 버렸습니다 =_=; 물론 마음에 들지 않으시는 분은 프로젝트 속성에서 output 을 새로 설정해 주시면 됩니다. 전 그냥 rename 하지 않고, 쭉~ 설명 하겠습니다.
빌드 설정
자, 프로젝트 속성에서 Configuration Properties -> General 에 들어가시면 상단 화면처럼 'Configuration Type' 이라는 메뉴가 있습니다. 이곳의 타입을 화면처럼 "Dynamic Library(.dll)"로 변경해 줍니다. 우린 dll을 만들 것이기 때문이죠.
그리고 이어서 Configuration Properties -> Linker -> Input 에 "Module Definition File" 에 앞서 작성한 Def 파일명을 입력합니다. 화면 하단에 설명되어 있는 것처럼 Linker 에 /DEF: 옵션을 주기 위한 것이죠.
마지막으로 Configuration Properties -> Linker -> System 에서 SubSystem 을 "Windows (/SUBSYSTEM:WINDOWS)" 로 선택합니다.
이제 build 를 위한 모든 준비가 끝났습니다. Ctrl + Alt + B 를 눌러서 프로젝트를 Build 하면 별 무리없이 수행 되는 것을 보실 수 있습니다. 그리고 폴더로 이동하면 .dll 파일이 만들어져 있을 것입니다. ^-^
DLL 사용하기
DLL 사용
마무리
개인적으로 저는 Assembly 를 매우 좋아합니다. 그 어떤 언어보다도 군더더기 없이 깔끔한 바이너리 파일을 만들어 주기 때문이죠. 저는 찝찝한 것을 매우 싫어합니다. 내가 만든 파일인데 실제로 binary 가 어떻게 되어 있는지 확신할 수 없죠. 하지만 assembly 는 그런 면에서 결코 프로그래머를 배신하지 않습니다. ^-^
앞으로는 MASM 프로그래밍에 대해서 포스팅을 하려고 합니다. 물론 Language 에 대해서 포스팅 한다는게 우스운 일이긴 합니다만, Assembly 프로그래밍에 대한 자료를 찾기 어려운 것이 사실입니다. 인터넷 서점을 뒤져봐도 대부분이 2000년 이전의 책들이지요. 이런 현실이 안타까운 1인으로서 assembly 를 조금이나마 알리고자 노력할 생각입니다. :) 아, Assembly 로만 완전한 프로그램을 만든다는것은 어리석은 이야기라는데 동의합니다. 하지만 많은 연산이 필요한 부분에 대해서는 assembly 만큼 좋은 언어는 없겠죠. 그리고 결정적으로 Reverse Engineering 을 위해서는 반드시 알아야 하는 언어랍니다. :)
'Microsoft > MASM32' 카테고리의 다른 글
[MASM 강좌] 튜토리얼 4 : Painting with Text (0) | 2010.11.29 |
---|---|
[MASM 강좌] 튜토리얼 3 : A Simple window (0) | 2010.11.29 |
[MASM 강좌] 튜토리얼 2 : MessageBox (1) | 2010.11.29 |
[MASM 강좌] 튜토리얼 1 : 기본 (1) | 2010.11.29 |
Visual Studio 2008 에서 MASM 개발하기 (4) | 2010.11.29 |
RECENT COMMENT