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.
Pour lui indiquer de passer pas ma fonction :
Et la fonction HUD_DirectorMessage (dans ma source)
J'ai beau modifier le contenu de pbuf ou iSize il s'en moque totalement, quelqu'un aurais t'il une idée ?
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;
}
}
Code:
gClient.HUD_DirectorMessage = &Gateway1_HUD_DirectorMessage;
Code:
void HUD_DirectorMessage (int iSize, void* pbuf) {
return;
}