如何使用過程模塊的基址和偏移量來讀取內存?我已經抓住具有以下所需模塊的基本地址:將ReadProcessMemory與過程模塊基址和偏移量一起使用
Process process = Process.GetProcessesByName("process")[0];
ProcessModule bClient;
ProcessModuleCollection bModules = process.Modules;
IntPtr processHandle = OpenProcess(0x10, false, process.Id);
int firstOffset = 0xA4C58C;
int anotherOffset = 0xFC;
for (int i = 0; i < bModules.Count; i++)
{
bClient = bModules[i];
if (bClient.ModuleName == "module.dll")
{
IntPtr baseAddress = bClient.BaseAddress;
Console.WriteLine("Base address: " + baseAddress);
}
}
之後,我加入了第一偏移基地址:
IntPtr firstPointer = IntPtr.Add(baseAddress, (int)firstOffset);
這給了我一個指針; 440911244在這種情況下。但是,我可以在Cheat Engine中使用此指針來瀏覽其內存區域,並找到anotherPointer
指向的值,但我找不到將偏移量添加到firstPointer
的正確方法。
我的問題是,在將最後的anotherOffset
添加到指針之前,是否必須使用ReadProcessMemory?如果是這樣,在這種情況下使用它的正確方法是什麼?
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
IntPtr lpBuffer,
int dwSize,
out IntPtr lpNumberOfBytesRead);
什麼是 「anotherOffset」?你期望從流程的內存中讀取什麼? –
@KrzysztofBracha firstOffset指向一個特定的內存區域,在那裏另一個Offset指向我需要讀取的「float」。 – Sami