Получаю адрес модуля и адрес функции main почему они не соответсвуют AddressOfEntryPoint?
int main() {
HMODULE hModule = GetModuleHandle(NULL);
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;
PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)((LPBYTE)hModule + pDosHeader->e_lfanew);
printf("hModule: 0x%llx\n", hModule);
//0x7ff6a9790000
printf("main: 0x%llx\n", main);
//0x7ff6a9792ea0
printf("AddressOfEntryPoint: %lx\n", pNtHeaders->OptionalHeader.AddressOfEntryPoint);
//0x41a8
return 0;
}
адрес hModule равен 0x7ff6a9790000, адрес main равен 0x7ff6a9792ea0
0x7ff6a9792ea0 - 0x7ff6a9790000 = 0x2ea0
а AddressOfEntryPoint равен 0x41a8 почему он не равен 0x2ea0?
Так же если делать по формуле EP(File) = AddressOfEntryPoint – BaseOfCode + .text[PointerToRawData] + FileAlignment
int text = 0;
printf("EP File: %x\n", pNtHeaders->OptionalHeader.AddressOfEntryPoint - (pNtHeaders->OptionalHeader.BaseOfCode + pSectHeader[text].PointerToRawData + pNtHeaders->OptionalHeader.FileAlignment)
//AddressOfEntryPoint:41b8
//BaseOfCode:1000
//PointerToRawData:400
//FileAlignment:200
0x41b8 - (0x1000 + 0x400 + 0x200) = 0x2bb8 что тоже не равно 0x2ea0
В чём ошибка? Как правильно посчитать?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости