1580, 10/79 회원가입  로그인  
   HongMK900
   GetProcAddress 로 알아보는 키워드

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=7899 [복사]



GetProcAddress 의 정의

FARPROC WINAPI GetProcAddress(
  _In_  HMODULE hModule,
  _In_  LPCSTR lpProcName
);

FARPROC
정의: typedef int (FAR WINAPI *FARPROC)();

정의 부분은 함수 포인터를 공부 했다면 알 수 있을 만한 내용이라고 생각된다.
int 형을 return 하고 함수 호출 규약은 __stdcall 의 형태인 함수에 대한 포인터 FARROC 이라는 함수 포인터 타입을 선언 한 것이다.

GetProcAddress 라는 API 함수는 hModule 이 가리키는 모듈의 Base Address에 해당하는 lpProcName 이 가리키는 함수의 포인터를 가지고 온다. 이 때 주소를 알아오는 함수의 인자 형태가 일정하기 않기 때문에 FARPROC을 사용하여 인자의 유연성을 두는 것이다. FAR에 대한 내용은 뒤에서 설명 하도록 하겠다.

**모듈이란**
프로그램의 일부로써 쉽게 표현하면 함수들의 집합을 의미한다. 우리가 흔히 볼 수 있는 형태는 DLL을 볼 수 있다. 하나의 DLL은 관련된 함수들의 집합으로 이루어져 있고, 현재의 많은 프로그램은 필요할 때 이러한 DLL 모듈을 여러 개 메모리로 로딩하여 동작하게 된다.

http://www.terms.co.kr/module.htm

**HMODULE 과 HINSTANCE**
이 둘은 16bit 운영체제에서 사용되다가 남아있는 것으로 32bit 인 현재는 모듈의 Base Address라는 의미로 통일되어 사용된다.
16bit에서의 개념
16bit 체계 에서는 모든 프로세스가 단일 메모리공간을 공유했으므로 동일한 프로세스가 반복해서 쓰일 경우(notepad.exe 창을 여러 개 띄우는 등) 사용되는 코드 자체는 동일 하므로 효율성을 위해 특별한 조치가 필요했다.
이때 사용된 것이 두 형태의 변수이다.
HMODULE 은 프로세스들이 공유하는 코드영역을 가리키는 용도
HINSTANCE 는 프로세스들 각각에 대한 데이터 영역을 가리키는 용도로 사용되었다.

http://blog.naver.com/PostView.nhn?blogId=chioo79&logNo=120096218243


WINAPI란?
정의: #define WINAPI      __stdcall

함수호출 규약 중 하나로 callee 에서 스택을 정리하는 형태를 보이며 Win32 API에서는 이 방식을 사용해서 함수를 호출한다. 자세한 사항은 [P06] 메모리의 이해 -> Calling Convention 에서 확인하기 바란다.

http://msdn.microsoft.com/en-us

FAR란?
현재 실행중인 가상메모리 공간(페이지) 에서 바로 접근하지 못 하고 다른 공간 (주로 dll이 로딩된 공간이 되겠다.) 에 해당 함수에 대한 코드가 존재 할 경우 사용한다. 위에서 예로든 GetProcAddress 함수로 다시 설명을 해보자.
보통 함수에 대한 참조를 하려면 해당 DLL 을 메모리로 로딩 하거나 맵핑 후 가지고 온다. LoadLibrary를 사용하여 DLL을 로딩 하게 되면 처음 로딩 때는 DLL을 위한 새로운 공간이 메모리에 마련되어 DLL이 로딩되고 해당 프로세스의 가상 메모리(가상 메모리의 페이지)로 맵핑 된다. 그 후 두 번째 참조부터는 참조 카운트만 1 증가하고 호출한 프로세스의 페이지에는 이미 올라와있는 DLL공간이 맵핑 되도록 하는 방식이 적용된다. Kernel32.dll 이나 User32.dll 처럼 대부분의 프로세스가 사용하는 DLL은 이미 메모리 공간 어딘가에 로딩 되었을 가능성이 크기 때문에 현재 프로세스의 가상메모리 공간에서 바로 참조를 할 수가 없는 것이다. 그러한 경우 적용하기 위해 FAR 이라는 키워드가 사용된다.

http://stackoverflow.com/questions/2774171/what-is-far-pascal

  Hit : 11526     Date : 2013/08/13 05:54



    
1400   리눅스 명령어 한꺼번에(소유님꺼)[11]     ssakura
07/07 11651
1399   2번째C강좌~![9]     괴도js
07/03 11642
1398   [동강]백트랙을 이용한 재밌는 놀이들![4]     cdpython
09/29 11577
1397   [자작]포렌식을위한NTFS구조[2]     havu
01/11 11574
1396   D.Dolphin님 질문내용] LAN과 WAN의 차이점과 VAN의 정의[5]     푸른하늘
09/11 11543
1395   [자작]프로세스모니터Operation필터     havu
01/10 11539
  GetProcAddress 로 알아보는 키워드     HongMK900
08/13 11525
1393   원격종료....[39]     bsjzzz
01/02 11524
1392   * 해킹영화 볼만한거 *[5]     HackerMapia
02/20 11497
1391   [펌] 알고있으면 유용한 도스 명령어들.[2]     dzhfldk
08/22 11437
1390   Xmanager로 리눅스 이용하기(멍멍님 만화강좌 사용)[15]     DarkSlayer
09/21 11395
1389   리눅스 시스템 정보 알아내기[3]     bitcom01
08/11 11392
1388   C언어 함수 요약[5]     qkreoghks00
11/15 11389
1387   cmd [명령프롬프트] 로 해커스쿨접속방법[30]     HackerMapia
01/12 11378
1386   [Project] 전기,전자 상식 및 샤프심으로 전구만들기. - 1[11]     아이프리드
02/03 11342
1385   bof & fsb 에 유용한 펄 스크립트[5]     awsedr45
03/11 11285
1384   [펌]TCP SYN_Flooding 공격의 원인과 해결책[1]     Chris Ruiel
10/06 11271
1383   리눅스 기본 명령[1]     jeongseok0
04/22 11266
1382   [컴퓨터 짱되는 100가지 팁] 네이버에서 퍼옴!![2]     turtle0216
04/12 11266
1381   윈도우즈 XP SP1 WFP (Windows File Protection) 끄기[1]     x90c
03/05 11264
[1][2][3][4][5][6][7][8][9] 10 ..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com