IMAGE_DIRECTORY_ENTRY_IMPORT
|-------------------|
| VirtualAddress |
|-------------------|
| Size |
|-------------------|
VirtualAddress + ImageBase가 IMAGE_IMPORT_DESCRIPTOR의 가상주소를 가진다.
IMAGE_IMPORT_DESCRIPTOR (임포트 테이블)
|----------------------|
| OriginalFirstThunk | -> INT(IMPORT_NAME_TABLE) 주소
|----------------------|
| TimeDateStamp |
|----------------------|
| ForwarderChain |
|----------------------|
| Name | -> DLL name 주소
|----------------------|
| FirstThunk | -> IAT(IMPORT_ADDRESS_TABLE) 주소
|----------------------|
* PE로더가 임포트 함수 주소를 IAT에 입력하는 과정
1. PE파일이 메모리에 로드된 후 데이터 디렉토리의 2번째 엔트리인 IMAGE_DIRECTORY_ENTRY_IMPORT에서 IMAGE_IMPORT_DESCRIPTOR의 위치를 구한다.
2. 순서대로 IMAGE_IMPORT_DESCRIPTOR에서 임포트 할 DLL name을 가져온 후 LoadLibrary() 한다.
3. OriginalFirstThunk에서 INT 주소를 얻어 온다.
4. INT에서 순서대로 서수(ordinal)나 함수 이름으로 함수 주소를 얻는다. [GetProcAddress() - EAT에서 가져옴]
5. FirstThunk를 읽어서 IAT 주소를 얻어와서 (4)번 과정에서 가져온 함수 주소를 IAT에 기록한다.
DLL개수 만큼 (1~5)를 반복한다.
각 DLL마다 임포트 함수 개수 만큼 (4~5)를 반복한다.
'Reversing > Reversing' 카테고리의 다른 글
ollydbg로 dll파일 디버깅 (0) | 2013.02.28 |
---|---|
static 안티 디버깅 (0) | 2013.01.03 |
함수 호출 규약 (1) | 2012.10.16 |
Windbg 명령어 요약 (0) | 2012.10.13 |
혼동되는 어셈블리 명령어 (2) | 2012.10.07 |