출처 : http://blog.eairship.kr/270
INT : IMAGE_THUNK_DATA 구조체 배열의 시작 주소값으로 이루어짐
-> typedef struct _IMAGE_THUNK_DATA{
union{
DWORD ForwarderString;
DWORD Function;
DWORD Ordinal;
DWORD AddressOfData;
}u1;
} IMAGE_THUNK_DATA32;
typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32;
(IMAGE_THUNK_DATA의 필드는 총 4개로 모두 공용체의 멤버이며,
공용체의 멤버인 만큼 DWORD가 차지하는 크기인 4바이트의 공간을 4개의 필드가 공유하며,
이 구조체는 AddressOfData 필드만 쓰이기도 하며,
Ordinal 필드만 쓰이기도 하고, Function 필드만 쓰이기도 합니다.)
OriginalFirstThunk: Import Name Table(INT)의 RVA를 지닙니다.
혹은 Import Lookup Table(ILT)의 RVA를 지닌다고 합니다.
여기서 INT는 구조체 IMAGE_THUNK_DATA의 배열로 구성이 되며,
구조체 IMAGE_THUNK_DATA의 AddressOfData 필드는
실제 Import되는 함수의 이름이 포함된 구조체 IMAGE_IMPORT_BY_NAME에 대한 RVA를 지닙니다.
FirstThunk: OriginalFirstThunk와 마찬가지로 FirstThunk 필드도
구조체 IMAGE_THUNK_DATA의 RVA 값을 지닙니다.
PE 파일이 메모리에 로딩되고 나서는
구조체 IMAGE_THUNK_DATA는 Import한 DLL 내의 함수의 실제 주소값을 지니며,
이렇게 함수의 주소값을 담고있는 구조체 IMAGE_THUNK_DATA 배열을 Import Address Table(IAT)라고 합니다.
'Reversing(리버싱 핵심 원리) > 개념' 카테고리의 다른 글
64비트 리버싱 (0) | 2018.08.29 |
---|---|
스텔스 프로세스 // 프로세스 숨기기 // 프로세스 은폐 (0) | 2018.07.29 |
HMODULE 과 HINSTANCE 차이점 (0) | 2018.07.20 |
DLL 정적,동적 로딩&암시적, 명시적 연결 개념 (0) | 2018.07.17 |
Thread(쓰레드) 개념 (0) | 2018.07.12 |