Подмена функции!!!!! Кто шарирт и кто не шарит.
От: 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 — Павел Кузнецов
Re: Подмена функции!!!!! Кто шарирт и кто не шарит.
От: Demon Россия  
Дата: 22.06.04 12:29
Оценка:
Здравствуйте, MaxKuk, Вы писали:

MK>Здравствуйте уважаемые программисты. Пожалуйста, помогите решить задачу. Нужно в моей программе подменить адрес функции причём из длл, во время её(длл) загрузки.


Думаю тебе в самый раз подойдет библиотека detours от microsoft'а.
Точный линк дать не могу, но я ее вроде с microsoft.com качал.
Re: Подмена функции!!!!! Кто шарирт и кто не шарит.
От: Toughpheeckouse Россия  
Дата: 22.06.04 12:55
Оценка:
Здравствуйте, MaxKuk, Вы писали:

читать сюда: Unraveling the Mysteries of Writing a Winsock 2 Layered Service Provider
Думайте сами, решайте сами...
Re: Подмена функции!!!!! Кто шарирт и кто не шарит.
От: alexxxander  
Дата: 22.06.04 17:41
Оценка: 1 (1)
Здравствуйте, MaxKuk, Вы писали:

MK>Здравствуйте уважаемые программисты. Пожалуйста, помогите решить задачу. Нужно в моей программе подменить адрес функции причём из длл, во время её(длл) загрузки.


...skipped....


В данном примере (при явной загрузке DLL) при загрузке DLL необходимо перехватить API вызов GetProcAddress и в перехватчике анализировать имя "заказанной" функции.... Соответственно, если это "WSAStartup", то вернуть адрес подставы.
Перехват API вызовов достаточно прост как с использованием вышеобозначенной detours, так и без нее (поверхностно описан в книге Рихтера).
The less I have the more I gain (с) Metallica
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.