Есть код, который отыскивает адресс ф-ции в таблице экспорта (в частности kernel32.dll): Код (Text): for (i = 0; i < expTbl_ptr->NumberOfNames; ++i) { char **ppp = (char**)((Uint32_t)BaseAddress + expTbl_ptr->AddressOfNames + i*sizeof(Uint32_t)); char *name = (Uint32_t)BaseAddress + *ppp; //тут сравнение имени ф-ции if (...) //наша ф-ция { ppp = (char**)((Uint32_t)module_ptr->BaseAddress + expTbl_ptr->AddressOfFunctions + i*sizeof(Uint32_t)); func_ptr = ((Uint32_t)module_ptr->BaseAddress + *ppp); } } Так вот, под Вистой ничегошеньки не работает, имена извлекает, а вот адреса не совпадают! В чем проблема? Под Вистой МС изменила PE-формат?
Сам нашел решение: Код (Text): if (...) //наша ф-ция { Uint16_t ord = *(Uint16_t*)((Uint32_t)module_ptr->BaseAddress + expTbl_ptr->AddressOfNameOrdinals + i*sizeof(Uint16_t)); ppp = (char**)((Uint32_t)module_ptr->BaseAddress + expTbl_ptr->AddressOfFunctions + ord*sizeof(Uint32_t)); func_ptr = ((Uint32_t)module_ptr->BaseAddress + *ppp); }