유리상자 속 이야기 : : 유리상자 속 이야기 ( 154 Page ) 
 MASM - DLL 만들 기 Microsoft / MASM 32 
 지난 시간 에 약속 한 대로 이번 시간 에 는 MASM 을 이용 하 여 DLL 을 만들 고 , DLL 을 이용 하 는 방법 에 대해서 설명 하 도록 하 겠 습니다 . 물론 Visual Studio 2008 환경 에서 설명 하 도록 하 겠 습니다 . 
 DLL 만들 기 
 이 예제 에서 는 DllTest . dll 을 생성 하 고 , 이 를 사용 하 도록 하 겠 습니다 . DllTest . dll 안 에 는 MsgBoxFunction 이 라는 Funcion 하나 가 들 어 있 습니다 . 소스 파 일 명 은 Test . asm 입니다 . 
 Extern 함수 를 추가 시키 려면 Def 파일 을 추가 로 작성 해 주 셔야 합니다 . 
 다시 말 해 Def 파일 이 없 으면 dll 은 생성 되 지만 , 외부 에서 사용 할 수 있 는 Export 함수 가 만들 어 지 지 않 습니다 . 
 Test . asm 코드 
 . 386 . model flat , stdcall option casemap : none include d : \ development \ masm 32 \ include \ windows . inc include d : \ development \ masm 32 \ include \ user 32 . inc include d : \ development \ masm 32 \ include \ kernel 32 . inc includelib d : \ development \ masm 32 \ lib \ user 32 . lib includelib d : \ development \ masm 32 \ lib \ kernel 32 . lib . data szMsg db " Hello ? Today is Monday ! ", 0 szCaption db " http : / / witstudio . net ", 0 . code DllEntry proc hInstDLL : HINSTANCE , reason : DWORD , reserved : DWORD mov eax , TRUE ret DllEntry Endp MsgBoxFunction proc push MB _ OK push offset szCaption push offset szMsg push NULL call MessageBox ret MsgBoxFunction endp End DllEntry 
 Test . Def 코드 
 LIBRARY Test EXPORTS MsgBoxFunction 
 빌드 에 앞서 설정 해 주 어야 할 것 들 이 있 습니다 . 그냥 빌 드 한다면 exe 파일 이 만들 어 지 겠 죠 . C ++ 프로젝트 에 익숙 하 신 분 들 은 별 무리 없이 setting 하 실 수 있 을 거 라고 생각 합니다 . 
 자 , 프로젝트 속성 에서 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 을 사용 하 는 방법 에 대해서 설명 하 도록 하 겠 습니다 . 사실 이것 은 MASM 에 대한 이야기 라기 보다 는 Win 32 에 더 가까울 것 입니다 . 어려운 부분 이 없 기 때문 에 , 따로 설명 드리 지 않 도록 하 겠 습니다 . 
 DLL 사용 
 . 386 . model flat , stdcall option casemap : none include d : \ development \ masm 32 \ include \ windows . inc include d : \ development \ masm 32 \ include \ user 32 . inc include d : \ development \ masm 32 \ include \ kernel 32 . inc includelib d : \ development \ masm 32 \ lib \ kernel 32 . lib includelib d : \ development \ masm 32 \ lib \ user 32 . lib . data DllName db " DllTest . dll ", 0 FunctionName db " MsgBoxFunction ", 0 . data ? hDll dd ? MsgBoxFunctionAddr dd ? . code start : push offset DllName call LoadLibrary mov hDll , eax push offset FunctionName push hDll call GetProcAddress mov MsgBoxFunctionAddr , eax call [ MsgBoxFunctionAddr ] push hDll call FreeLibrary push NULL call ExitProcess end start 
 개인 적 으로 저 는 Assembly 를 매우 좋 아 합니다 . 그 어떤 언어 보다 도 군더더기 없이 깔끔 한 바이너리 파일 을 만들 어 주 기 때문 이 죠 . 저 는 찝찝 한 것 을 매우 싫 어 합니다 . 내 가 만든 파일 인데 실제로 binary 가 어떻게 되 어 있 는지 확신 할 수 없 죠 . 하 지만 assembly 는 그런 면 에서 결코 프로그래머 를 배신 하 지 않 습니다 . ^-^ 
 앞 으로 는 MASM 프로그래밍 에 대해서 포스팅 을 하 려고 합니다 . 물론 Language 에 대해서 포스팅 한다는 게 우스운 일 이 긴 합니다만 , Assembly 프로그래밍 에 대한 자료 를 찾 기 어려운 것 이 사실 입니다 . 인터넷 서점 을 뒤져봐도 대부분 이 2000 년 이전 의 책 들 이 지요 . 이런 현실 이 안타까운 1 인 으로서 assembly 를 조금 이나마 알리 고자 노력 할 생각 입니다 . : ) 아 , Assembly 로만 완전 한 프로그램 을 만든 다는 것 은 어리석 은 이야기 라는 데 동의 합니다 . 하지만 많 은 연산 이 필요 한 부분 에 대해서 는 assembly 만큼 좋 은 언어 는 없 겠 죠 . 그리고 결정 적 으로 Reverse Engineering 을 위해서 는 반드시 알 아야 하 는 언어 랍니다 . : ) 
 dll , DLL 만들 기 , MASM , Visual Studio , visual studio 2008 , 어 셈 , 어셈블리 어 
 이전 1 · · · 151 152 153 154 155 156 157 · · · 159 다음 
 이렇게 만들 어 진 lib 은 프로 젝 . . 
 809 , 577