ďťż

Ładny brzuch

Witam

W książce c++ elementarz hakera był przykład biblioteki DLL Oto jej kod:

dll.h
#include <windows.h> #define DllExport extern "C" __declspec(dllexport) DllExport void RunStopHook(bool State, HINSTANCE hInstance);

dllmain.cpp
#include "dll.h" HHOOK SysHook; HWND Wnd; HINSTANCE hInst; BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserve ) { hInst = (HINSTANCE)hModule; return TRUE; } LRESULT CALLBACK SysMsgProc( int code, // Kod zaczepu WPARAM wParam, // Znacznik usuwania LPARAM lParam // Adres struktury komunikatu ) { // Prześlij komunikat do pozostałych zaczepów systemu CallNextHookEx(SysHook, code, wParam, lParam); // Sprawdź komunikat if (code == HC_ACTION) { // Pobierz uchwyt okna, które wygenerowało komunikat Wnd = ((tagMSG*)lParam)->hwnd; // Sprawdzenie typu komunikatu. // Czy użytkownik nacisnął prawy klawisz myszy? if (((tagMSG*)lParam)->message == WM_RBUTTONDOWN) { SendMessage(Wnd, EM_SETPASSWORDCHAR, 0, 0); InvalidateRect(Wnd, 0, true); } } return 0; } /////////////////////////////////////////////////////////////////// DllExport void RunStopHook(bool State, HINSTANCE hInstance) { if (true) SysHook = SetWindowsHookEx(WH_GETMESSAGE, &SysMsgProc, hInst, 0); else UnhookWindowsHookEx(SysHook); }
Moje pytanie brzmi dlaczego gdy kompiluję ten kod w Dev c++. Następnie wywołam funkcję RunStopHook nie jest zakładany zaczep, a gdy zastąpie orginalną biblioteką wszystko działa jak powinno? Orginalny kod był chyba w Visual c++ pisany. Dodam jeszcze że gdy do biblioteki dodam inną funkcję to ona działa.



Marsz do FAQ !!!!! ;p (tylko pomin to felix.leg-a bo to kompletne bzdury i brednie. Przeczytaj ten temporala a bedziesz wiedzial ;) )

// edit2 do migajka - a zreszta olac ;)
Użytkownik st3tc edytował ten post 19 grudzień 2005, 19:47

Marsz do FAQ !!!!! ;p (tylko pomin to felix.leg-a bo to kompletne bzdury i brednie. Przeczytaj ten temporala a bedziesz wiedzial ;) )

a co Ci zwraca SetWindowsHookEx ?. Sprawdz czy nie null-ek. Jak nulek wywolaj GetLastError. Sprawdz tez poprawnosc hinstance.
Użytkownik st3tc edytował ten post 19 grudzień 2005, 20:41



a co Ci zwraca SetWindowsHookEx ?. Sprawdz czy nie null-ek. Jak nulek wywolaj GetLastError. Sprawdz tez poprawnosc hinstance.

jezeli uzywasz thread id == 0, to hinstance musi wskazywac na dll-ke (o ile pamietam ;) ). Prosta metoda - GetModuleHandle( "nazwa_tej_dll-ki"). To zwroci handle - ale to to samo co hinstance (scastuj).
// edit - naturalnie pobiez to w dll-ce (handle do samej siebie ;)). Z DllMain byly jakies jazdy - juz nie pamietam dokladnie (nie chce mi sie szukac ;) )
Użytkownik st3tc edytował ten post 19 grudzień 2005, 22:37

jezeli uzywasz thread id == 0, to hinstance musi wskazywac na dll-ke (o ile pamietam ;) ). Prosta metoda - GetModuleHandle( "nazwa_tej_dll-ki"). To zwroci handle - ale to to samo co hinstance (scastuj).
// edit - naturalnie pobiez to w dll-ce (handle do samej siebie ;)). Z DllMain byly jakies jazdy - juz nie pamietam dokladnie (nie chce mi sie szukac ;) )

Ja juz Ci dalem rade - dalej to juz rob jak chcesz ;)

Już sam nie wiem co jest źle. Skopiowałem dokładnie cały kod z książki, skompilowałem w DEVc++. Następnie przeniosłem bibliotekę do katalogu programu głównego i jednak też zaczep nie został założony. Działa tylko skompilowana bibliotkeka ktra znajduje sie na CD tej książki.

a zrobiles jak mowilem ?. Sprawdziles hinstance co idzie do SetWindowHook ?. Jezeli jest null to pobrales wlasnorecznie handle (hinstance) dll-ki i przekazales ?. Czytales helpa z PSDK ? ;). Nie mozna biadolic tylko uwaznie czytac posty :). DllMain wcale nie musi byc DllMain. dll-ka moze miec dowolne "entry".


a zrobiles jak mowilem ?. Sprawdziles hinstance co idzie do SetWindowHook ?. Jezeli jest null to pobrales wlasnorecznie handle (hinstance) dll-ki i przekazales ?. Czytales helpa z PSDK ? ;). Nie mozna biadolic tylko uwaznie czytac posty :).  DllMain wcale nie musi byc DllMain. dll-ka moze miec dowolne "entry".


Tylko czemu DllMain sie nie wykonuje?

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •