IMAGE_NT_HEADER 는 ImageBase로 부터 IMAGE_DOS_HEADER->e_lfanew 만큼 떨어져있습니다.
int main(void)
{
HMODULE module_base = GetModuleHandle(NULL);
LPVOID base_addr = (LPVOID)module_base;
PIMAGE_DOS_HEADER dos_header = (PIMAGE_DOS_HEADER)base_addr;
PIMAGE_NT_HEADERS nt_header = (PIMAGE_NT_HEADERS)((UINT_PTR)base_addr + dos_header->e_lfanew);
std::cout << std::hex << nt_header->Signature << std::endl;
return 0;
}
imageBase에 dos_header의 e_lfanew를 더한 주소값이 nt_header의 주소가됩니다.
PIMAGE_NT_HEADERS nt_header = (PIMAGE_NT_HEADERS)((UINT_PTR)base_addr + dos_header->e_lfanew)
nt_header의 Signature를 출력해보면 45 50 이라는 것을 확인 할수 있습니다.
PEview를 켜서 확인 해보면 결과가 같은것을 확인 할 수 있습니다.
댓글