Jak dodać offsety do adresu w funkcji WriteProcessMemory?

0

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

0

Baza czyli podstawowy adres, gdzie został załadowany proces + adres relatywny RVA?

0

Poszukuje pomocy w jaki sposób uda mi się adres pointera wrzucić do funkcji.
Jeśli dobrze rozumiem to potrzebuje base adress + ten adres 4... a potem dodawać offsety, ale kompilator głupieje gdy są w offsetach litery.

1 użytkowników online, w tym zalogowanych: 0, gości: 1