Подмена функции!!!!! Кто шарирт и кто не шарит.
От: MaxKuk  
Дата: 22.06.04 12:26
Оценка:
Здравствуйте уважаемые программисты. Пожалуйста, помогите решить задачу. Нужно в моей программе подменить адрес функции причём из длл, во время её(длл) загрузки.

// mydll.cpp
int WSAAPI MyWSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData)
{
    MessageBox(0,"yo","ПЕРЕХВАТИЛЛЛ!!" , 0);
    int Ret = WSAStartup(wVersionRequested,lpWSAData);
    return Ret;
}

BOOL APIENTRY DllMain(HINSTANCE hinstDll, DWORD dwReason,LPVOID lpReserved)
{
 switch(dwReason)
 {
 case DLL_PROCESS_ATTACH:
    /*
    Тут надо сделать чтобы вместо _WSAStartup вызывался
    MyWSAStartup из dll.
    */ 
 break;
 case DLL_PROCESS_DETACH:
 break;
 }
 return TRUE;
}

// myexe.cpp

int main(int argc, char* argv[])
{
    
    HINSTANCE uDll = LoadLibrary((LPCTSTR) "wsock32.dll");
    int (WSAAPI * _WSAStartup)(WORD,LPWSADATA);
    int (WSAAPI * _WSACleanup)();
    *(FARPROC *)&_WSAStartup = GetProcAddress(uDll, "WSAStartup");
    *(FARPROC *)&_WSACleanup = GetProcAddress(uDll, "WSACleanup");

    HINSTANCE uDll = LoadLibrary((LPCTSTR) "mydll.dll");
    //При загрузке mydll.dll должна подменить _WSAStartup
    
    if (_WSAStartup(0x0101, &wsaData)) 
    {
        printf ("winsock not bi initialized !\n");
        _WSACleanup();
    }
    else printf("Winsock initial OK !!!!\n");

    if (_WSACleanup())
        printf("Error Cleapir\n");
    else
    printf("Cleapir Good !!!!!\n");
    return 0;
}



22.06.04 19:49: Перенесено модератором из 'C/C++'. Lorenzo_LAMAS (7) в WIN API ioni (5) в WIN API — Павел Кузнецов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.