Czyli tak, w CE znalazłem sobie pointer do pewnego adresu, ale nie mam pojęcia jak przekształcić go do funkcji WriteProcessMemory.
Normalnie jak miałem zwykly adres to używałem
WriteProcessMemory(hProc, (LPVOID)0x04039538, &value, (DWORD)sizeof(value), NULL)
A jak w CE mam coś takiego
"nazwaprocesu.exe" +04039538
Offset 0: 28
Offset 1: 19c
Offset 2: 224
Offset 3: 7d4
Offset 4: 518
Jak w takiej sytuacji powinna wyglądać funkcja WriteProcessMemory?
Znalazłem, że base adres można uzyskać korzystając z tej funkcji:
DWORD GetModuleBase(LPSTR lpModuleName, DWORD dwProcessId);//deklaracja
DWORD baseAddr = GetModuleBase("", processID);/odczytuje
DWORD GetModuleBase(LPSTR lpModuleName, DWORD dwProcessId)//i funkcja do odczytu
{
MODULEENTRY32 lpModuleEntry = {0};
HANDLE hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
if(!hSnapShot)
return 0;
lpModuleEntry.dwSize = sizeof(lpModuleEntry);
BOOL bModule = Module32First( hSnapShot, &lpModuleEntry );
while(bModule)
{
if(!strcmp( lpModuleEntry.szModule, lpModuleName ) )
{
CloseHandle( hSnapShot );
return (DWORD)lpModuleEntry.modBaseAddr;
}
bModule = Module32Next( hSnapShot, &lpModuleEntry );
}
CloseHandle( hSnapShot );
return 0;
}
dodanie znacznika <code>
- @furious programming