/*ReadProcessMemory Offset Şablonu Örnek Kullanım - Example*/
DWORD Adres =(DWORD) GetModuleHandleA("ac_client.exe") +0x0010F418;
LM_WriteMemoryOffset<int>(GetCurrentProcess(),/*Hedef Adres*/Adres,/*Değer*/100,/*Offset Sayısı*/4,/*Offsetler*/0xF8,0x1DC,0x8,0x150);
int Value = LM_ReadMemoryOffset<int>(GetCurrentProcess(),/*Hedef Adres*/Adres,/*Offset Sayısı*/4,/*Offsetler*/0xF8,0x1DC,0x8,0x150);
template< typename VeriTürü >VeriTürü LM_ReadMemoryOffset(HANDLE hProc ,DWORD adres/*Hedef Adres*/ ,int oCount/*Offset Sayısı*/,...)
{
DWORD outAdres[8];
va_list in_List;
DWORD val;
VeriTürü Value;
va_start(in_List,oCount);
ReadProcessMemory(hProc,(LPCVOID)adres,&outAdres[0],4,0);
for (int i=0;i<oCount;i++)
{
val=va_arg(in_List,DWORD);
switch (i)
{
case 0:
ReadProcessMemory(hProc,(LPVOID)(outAdres[0] + val),&outAdres[1],4,0);
break;
case 1:
if(i==oCount-1)
ReadProcessMemory(hProc,(LPVOID)(outAdres[1] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[1] + val),&outAdres[2],4,0);
break;
case 2:
if(i==oCount-1)
ReadProcessMemory(hProc,(LPVOID)(outAdres[2] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[2] + val),&outAdres[3],4,0);
break;
case 3:
if(i==oCount-1)
ReadProcessMemory(hProc,(LPVOID)(outAdres[3] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[3] + val),&outAdres[4],4,0);
break;
case 4:
if(i==oCount-1)
ReadProcessMemory(hProc,(LPVOID)(outAdres[4] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[4] + val),&outAdres[5],4,0);
break;
case 5:
if(i==oCount-1)
ReadProcessMemory(hProc,(LPVOID)(outAdres[5] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[5] + val),&outAdres[6],4,0);
break;
case 6:
if(i==oCount-1)
ReadProcessMemory(hProc,(LPVOID)(outAdres[6] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[6] + val),&outAdres[7],4,0);
break;
default:
break;
}
}
va_end(in_List);
return Value;
}
template< typename VeriTürü >VeriTürü LM_WriteMemoryOffset(HANDLE hProc ,DWORD adres/*Hedef Adres*/ ,VeriTürü Value/*Değer*/,int oCount/*Offset Sayısı*/,...)
{
DWORD outAdres[8];
va_list in_List;
DWORD val;
va_start(in_List,oCount);
ReadProcessMemory(hProc,(LPCVOID)adres,&outAdres[0],4,0);
for (int i=0;i<oCount;i++)
{
val=va_arg(in_List,DWORD);
switch (i)
{
case 0:
ReadProcessMemory(hProc,(LPVOID)(outAdres[0] + val),&outAdres[1],4,0);
break;
case 1:
if(i==oCount-1)
WriteProcessMemory(hProc,(LPVOID)(outAdres[1] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[1] + val),&outAdres[2],4,0);
break;
case 2:
if(i==oCount-1)
WriteProcessMemory(hProc,(LPVOID)(outAdres[2] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[2] + val),&outAdres[3],4,0);
break;
case 3:
if(i==oCount-1)
WriteProcessMemory(hProc,(LPVOID)(outAdres[3] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[3] + val),&outAdres[4],4,0);
break;
case 4:
if(i==oCount-1)
WriteProcessMemory(hProc,(LPVOID)(outAdres[4] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[4] + val),&outAdres[5],4,0);
break;
case 5:
if(i==oCount-1)
WriteProcessMemory(hProc,(LPVOID)(outAdres[5] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[5] + val),&outAdres[6],4,0);
break;
case 6:
if(i==oCount-1)
WriteProcessMemory(hProc,(LPVOID)(outAdres[6] + val),&Value,4,0);
else
ReadProcessMemory(hProc,(LPVOID)(outAdres[6] + val),&outAdres[7],4,0);
break;
default:
break;
}
}
va_end(in_List);
return Value;
}