EAT(Export Address Table)
EAT(Export Address Table)에 대해서 알아보겠습니다. EAT(Export Address Table)는 PE 파일의 함수를 외부에서 호출할 수 있도록 만든 테이블입니다. EAT의 주소는 DataDirectory[0] IMAGE_DIRECTORY_ENTRY_EXPORT VA에 저장되어 있습니다. EAT 구조는 winnt.h에 _IMAGE_EXPORT_DIRECTORY에 정의되어 있습니다. 여기서 중요한 것은 'DWORD Name', 'DWORD Base', 'DWORD NumberOfFunctions', 'DWORD NumberOfNames', 'DWORD AddressOfFunctions', 'DWORD AddressOfNames', 'DWORD AddressOfNameOrdinals'입니다. Name 값은 dll 이름이 저장된 주소가 저장되어 있습니다.(File Offset 계산 필요 - dll 이름을 변경하여도 원래 이름을 확인 가능) Base 값은 함수 Ordinal의 시작 번호입니다. NumberOfFunctions 값은 모든 Export 함수의 개수입니다. NumberOfNames 값은 이름으로 Export 되는 함수의 개수입니다. Ordinal로 Export 되는 함수는 포함되지 않습니다.(NumberOfFunctions 값보다 작거나 같습니다) AddressOfFunctions 값은 모든 Export 함수의 실제 주소 배열의 시작 주소입니다. AddressOfNames 값은 Export 함수의 이름이 저장되어 있는 배열의 시작 주소입니다. AddressOfNameOrdinals 값은 이름으로 Export 되는 함수의 Ordinal 배열의 시작 주소입니다. 제가 만든 PE Viewer로 예를 들겠습니다. User32.dll을 분석해보았습니다. Name 값입니다. 0x9a7de USER3...