プロセスモジュールのベースアドレスとオフセットを使用してメモリを読み取るにはどうすればよいですか?私は、次の所望のモジュールのベースアドレスをつかんでいます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。
たとえば、メモリ領域を参照して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は特定のメモリ領域を指し、anotherOffsetは読み込みが必要な "float"を指します。 – Sami