EAX beginnt von 0

04/07/2010 02:14 bloodx#1
Hallo, ich hab ein Problem und zwar hab ich ne Function Hooked..

Alles gut und schön.. hab das alles so gelöst
->
Code:
__declspec(naked) void UseShoes(int _this, int edx,int ItemId) 
{ 
	__asm { 
		push ebp 
			mov ebp, esp 
			push ecx 
			mov [ebp-0x04], ecx 
			movzx eax, [ebp+0x08] 
			mov ItemId, eax
			pushfd 
			pushad 
	} 
	printf("ItemID[%d]\n",ItemId);
	__asm { 
		popad 
			popfd 
			mov ecx, [ebp-0x04] 
		mov [ecx+4B44h], eax
			mov esp, ebp 
			pop ebp 
			retn 4 
	} 
}
So wenn EAX das ich in ItemId packe aber größer als 255 ist fängt er von 0 an und gibt mir somit nen falschen wert aus..

hat jemand vllt ne idee woran das liegen könnte?.
04/07/2010 13:15 5andr0#2
void __fastcall hook::use_shoes(DWORD_PTR _this, int edx_unused, int item_id)
{
std::cout<<item_id<<std::endl;
*(__int32*)(_this + 0x4b44) = item_id;
}

eax wurde durch printf returnwert überschrieben
04/07/2010 14:42 bloodx#3
Danke für die erste Vernünftige Antwort c(:

naja leider wird immer noch icht der richtige Index(item_id) übergeben.
04/07/2010 15:04 ms​#4
Er lädt doch den Wert von eax in die Variable, bevor er printf() callt.

Warum benutzt du movzx anstatt mov? Dadurch wird doch dann nur 1 Byte gemovet, oder?

Code:
push ebp 
mov ebp, esp 
push ecx 
mov [ebp-0x04], ecx
Das sieht auch etwas komisch aus. Du pushst ecx auf den Stack und lädst den selben Wert dann wieder von ecx an die gleiche Stelle im Stack.
04/07/2010 16:49 bloodx#5
Ich hab nur die Function nachgeschrieben.
so sieht die Original Function aus, außer halt das ich die ID hole :P
04/07/2010 17:29 ms​#6
Welcher Teil ist denn genau die Originalfunktion?
04/07/2010 17:53 bloodx#7
Code:
.text:0040F980 var_4           = dword ptr -4
.text:0040F980 arg_0           = word ptr  8
.text:0040F980
.text:0040F980                 push    ebp
.text:0040F981                 mov     ebp, esp
.text:0040F983                 push    ecx
.text:0040F984                 mov     [ebp+var_4], ecx
.text:0040F987                 movzx   eax, [ebp+arg_0]
.text:0040F98B                 mov     ecx, [ebp+var_4]
.text:0040F98E                 mov     [ecx+4B44h], eax
.text:0040F994                 mov     esp, ebp
.text:0040F996                 pop     ebp
.text:0040F997                 retn    4
.text:0040F997 sub_40F980      endp
das ist die Original Function aus IDA...
04/07/2010 18:16 ms​#8
Vielleicht so?

Code:
movzx eax, [COLOR="Red"][B]word ptr[/B][/COLOR][ebp+0x08]
04/07/2010 19:37 bloodx#9
Quote:
Originally Posted by Disconnect View Post
Vielleicht so?

Code:
movzx eax, [COLOR="Red"][B]word ptr[/B][/COLOR][ebp+0x08]
Ahhhh ich liebe dich :D:D danke :) funzt perfekt.