본문 바로가기

[PROGRAMMING]/▶Window System Programming

GetModuleHandle 과 Loadlibrary 대하여..

<GetModuleHandle = LoadLibrary>

HMODULE GetModuleHandle ( LPCSTSTR lpModuleName );

HMODUEL LoadLibrary(LPCTSTR lpFileName);

GetModuleHandle은 그리 접할일이 많지 않은 함수이다.  우선 모듈이라는 말은
간 단히 함수들의 집합이다.  특정일을 처리한다는 객체의 개념으로 해석할 수도 있다. 다른 공학에서는 모듈이 있지만 역시 기능을 모아 놓았다는 비슷한 뜻이다.  함수들의 집합이라고 해도 아직 좀 막연한데 윈도우 내에서는 구체적인 예로 DLL이나 EXE 파일이 있다


MSDN 에 의하면 GetModuleHandlle은 모듈의엔트리 포인트를 넘겨주는 함수이다.


엔트리 포인트Base Adress이다 C 프로그램의 엔트리 포인트는  main 이요, 윈도우 프로그래밍의 엔트리 포인트는 WinMain  이 아닌가. 물론 관점에 따라 스타트업 코드를 엔트리 포인트라고 할수도 있다.

lpModuleName 에 dll 이나 exe 파일 이름을 넘겨주면 모듈에 대한 핸들 을 리턴하는 것이 아니라 실제 리턴값은 베이스 주소 값을 넘겨준다. 결국 GetModuleHandledllexe베이스 주소를 리턴하는 함수이다. 


 LoadLibrary  역시 같은 기능을 하지만 레퍼런스 카운팅 ( referencing counting ) 을 하느냐 안하냐의 차이점이 있다.

 LoadLibrary  의 경우 레퍼런스 카운트를 올리지만   GetModuleHandle 은 올리지 않는다 그러므로

단순한 값만 참조할때는 GetModuleHandle 을 실제 지속적으로 사용하기 위해서는 LoadLibrary 를 사용한다.

<GetProcAddress>

FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);

DLL에서 Export한 함수의 번지를 찾아서 그 함수를 사용할 수 있도록 그 함수의 포인터를 리턴해 주는 API

 

[출처 및 참고]

http://blog.naver.com/pwk0810?Redirect=Log&logNo=40131525623|작성자 분발하자

http://blog.naver.com/hsshee?Redirect=Log&logNo=70037637328

http://blog.naver.com/sorkelf?Redirect=Log&logNo=40133647878 GetmMoudleHandle 과 Loadlibrary GetprocAddress 사용법

http://blog.naver.com/shw20319?Redirect=Log&logNo=20138056582    어셈연산자

http://www.reversecore.com/54    실행파일이 커널에서 실행방법

http://marcof.tistory.com/22 윈도우 커널구조 그림