#1 23-08-2011 03:54

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Заменить участок кода...

Имеется участок кода:

.text:004C47DF 028                 inc     ebx             ; default
.text:004C47E0 028                 add     ebp, 38h
.text:004C47E3 028                 cmp     ebx, 4Bh        ; ?
.text:004C47E6 028                 fldz
.text:004C47E8 028                 fldz
.text:004C47EA 028                 fldz
.text:004C47EC 028                 jl      loc_4C49F0
.text:004C47F2 028                 cmp     ds:_menu.field_35, 0
.text:004C47F9 028                 jz      loc_4C4A00
.text:004C47FF 028                 cmp     ds:?drawRadar, 0
.text:004C4806 028                 jz      short loc_4C4820
.text:004C4808 028                 fld     flt_68FDA0
.text:004C480E 028                 fsub    ds:flt_704734
cmp     ebx, 4Bh

Беда такая что сюда не влазеет больше байта...

По пытался с инжектить:

void injectFunctionCall(DWORD address, DWORD function) 
{
DWORD Old;
	VirtualProtect( PVOID(address), 16, PAGE_READWRITE, &Old);
	BYTE * patch = (BYTE *)address;
	*patch = 0xE8;	// Call
	*(DWORD *)(patch+1) = (function-(address+5));	
	VirtualProtect( PVOID(address), 16, Old, &Old);
}

__declspec(naked) void  Code_1()
{

 _asm inc     ebx            
 _asm add    ebp, 38h
 _asm cmp   ebx, 1600h
 _asm retn;
}
 injectFunctionCall(0x04C47DF, (DWORD)Code_1); 
 PathByte(0x04C47E4, 0x90);
 PathByte(0x04C47E5, 0x90);

Но не че не заменяется!!! Игра вылетает, как же заменить кусок кода на свой?

Offline

#2 23-08-2011 12:31

RDH
From: Энгельс
Registered: 09-01-2010
Posts: 65

Re: Заменить участок кода...

Обычно инжекты делают с помощью опкода jmp и ссылаются им на участок размеченной памяти (VirtualAlloc).


programmer.png
modder.jpg

Offline

#3 23-08-2011 12:43

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Заменить участок кода...

Тут не просто инжект надо было делать))))

Offline

Board footer

Powered by FluxBB