Import Address Table의 약자로 Windows 운영체제의 핵심 개념인 DLL, memory, process 구조 등에 대한 내용이 함축 --> 어떤 라이브러리에서 어떤 함수를 사용하고 있는지 기술한 테이블
--> 해당 개념들을 이용해서 만들어진 파일 확장자라고 생각하면 편하다.

왜 CALL 7C8107F0으로 하지 않을까?

| 항목 | 의미 |
|---|---|
| OriginalFirstThunk | INT(Import Name Table)의 주소(RVA) |
| Name | Library 이름 문자열의 주소(RVA) |
| FirstThunk | IAT(Import Address Table)의 주소(RVA) |
INT(Import Name Table) : DLL에서 가져와야 할 함수들의 이름을 저장하는 테이블(배열)
IAT(Import Address Table) : DLL 함수의 실제 메모리 주소를 저장하는 테이블(배열)


Export Address Table의 약자로 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 쓸 수 있도록 해주는 핵심 메커니즘

| 항목 | 의미 |
|---|---|
| NumberOfFunctions | 실제 Export 함수 개수 |
| NumberOfNames | Export 함수 중에서 이름을 가지는 함수 개수 (<= NumberOfFunctions) |
| AddressOfFunctions | Export 함수 주소 배열 (배열의 원소 개수 = NumberOfFunctions) |
| AddressOfNames | 함수 이름 주소 배열 (배열의 원소 개수 = NumberOfNames) |
| AddressOfNameOrdinals | Ordinal 주소 배열 (배열의 원소 개수 = NumberOfNames) |

라이브러리에서 함수 주소를 얻는 API는 GetProcAddress()이다. 이 API를 통해서 EAT를 참조하여 API의 주소를 구하는 것이다.

(1) 함수 이름 배열에서 함수 이름 찾기
(2) Ordinal 배열에서 name_index로 ordinal 값을 찾기
(3) EAT로 가서 ordinal을 배열 인덱스로 하는 함수의 시작 주소 값 구하기
IAT : IMAGE_OPTIONAL_HEADER32.DataDirectory[1].VirtualAddress ~ DataDirectory[n].VirtualAddress
EAT : IMAGE_OPTIONAL_HEADER32.Datadirectory[0].VirtualAddress
IMAGE_IMPORT_DIRECTORY >> IMAGE_IMPORT_DESCRIPTOR == IMPORT Directory Table --> IMPORT는 여러 함수를 할 수 있으므로 여러 개 존재 가능
IMAGE_EXPORT_DIRECTORY --> EXPORT는 함수의 시작 주소를 참조하게끔만 하면 되므로 하나만 존재