Я полагаюсь на GetProcAddress()
для перехвата некоторых функций. Однако я получаю ужасный результат, и, честно говоря, я действительно не знаю, что происходит.
Кажется, что этот код выведет "ЧТО ЗА ЧЕРТА?":
int main(void)
{
HMODULE ws32 = LoadLibrary("WS2_32.DLL");
if (GetProcAddress(ws32, "ntohl") == GetProcAddress(ws32, "htonl"))
printf("WHAT THE HELL\n");
return 0;
}
Может ли кто-нибудь объяснить мне, почему ntohl и htonl имеют одинаковые абсолютные адреса? Проблема в том, что когда я подключаюсь к DLL и выполняю некоторую обработку внутри DLL, становится ясно, что внутри таблицы импорта PE (я анализирую PE IAT) ntohl()
и htonl()
имеют разные адреса (внутри IAT, как сказано).
Так что эта штука делает мою программу бесполезной. ntohl()
смешивается с htonl()
, и программа не может ничего изменить и сходит с ума.
Есть предположения? Будет ли способ обойти это? Объяснение?