Problème Hook de fonction

Discussion dans 'Web, design' créé par neku, 24 Février 2007.

Statut de la discussion:
Fermée.
  1. Offline
    neku Codeur roumain
    Alors voila, j'ai hook une fonction mais mon problème est (il me semble) que la fonction d'origine soit appelée avant ou alors malgré que je modifie les paramètre passé à la fonction il retourne ceux d'origine.

    Code:
    01D0E1AF   68 2890E801	  PUSH hl.01E89028						 ; ASCII "HUD_DirectorMessage"
    01D0E1B4   51			   PUSH ECX
    01D0E1B5   A3 F4CAF302	  MOV DWORD PTR DS:[2F3CAF4],EAX
    01D0E1BA FFD6	 CALL ESI
    
    0x2F3CAF4 Contient l'adresse de HUD_DirectorMessage
    EAX = 0x01942920
    
    01942920   8B15 F079A101	MOV EDX,DWORD PTR DS:[1A179F0]		   ; hl.01E884C0
    01942926   8D4424 08		LEA EAX,DWORD PTR SS:[ESP+8]
    0194292A   8D4C24 04		LEA ECX,DWORD PTR SS:[ESP+4]
    0194292E   50			   PUSH EAX
    0194292F   51			   PUSH ECX
    01942930   FF92 94000000	CALL DWORD PTR DS:[EDX+94]
    
    0x01942930 - 0x01942920 = 0x10
    
    La fonction utilise 2 arguments
    1) int iSize
    2) void* pbuf
    
    iSize est placé dans ECX
    pbuf est placé dans EAX
    
    __declspec( naked )void Gateway2_HUD_DirectorMessage( void )
    {
    	__asm
    	{
    		call HUD_DirectorMessage;
    		jmp retaddress;
    	}
    }
    
    DWORD DirectorMessage= (DWORD)&Gateway2_HUD_DirectorMessage;
    __declspec( naked )void Gateway1_HUD_DirectorMessage( void )
    {
    	__asm
    	{
    		push esi;
    		mov esi,dword ptr ss:[esp+0x10];
    		mov retaddress,esi;
    		push DirectorMessage
    		pop esi;
    		mov dword ptr ss:[esp+0x10],esi;
    		pop esi;
    		ret;
    	}
    }
    Pour lui indiquer de passer pas ma fonction :
    Code:
    gClient.HUD_DirectorMessage = &Gateway1_HUD_DirectorMessage;
    
    Et la fonction HUD_DirectorMessage (dans ma source)
    Code:
    void HUD_DirectorMessage (int iSize, void* pbuf) {
    	return;
    }
    
    J'ai beau modifier le contenu de pbuf ou iSize il s'en moque totalement, quelqu'un aurais t'il une idée ?
    neku, 24 Février 2007
    #1
  2. Offline
    neku Codeur roumain
    Vraiment personne pour m'aider ?
    neku, 25 Février 2007
    #2
  3. Offline
    guslinux Gamerz'ien
    c'est quoi pour un langage ca ?
    guslinux, 25 Février 2007
    #3
  4. Offline
    k o D Belge !
    çà ressemble à de l'ASM appelé via du C
    k o D, 25 Février 2007
    #4
  5. Offline
    Ezekiel ! Elite
    On dirait bien o_O
    Je savais pas qu'on pouvait faire ça... Ca doit pas être super pratique qd meme :s
    Ezekiel !, 25 Février 2007
    #5
Statut de la discussion:
Fermée.