私は何時間もウェブ全体を検索しましたが、以下のコードが機能しない理由を一生理解できません。
プロセス用に取得されたベース アドレスが間違っているようです。エンドアドレスを に直接ハードコードするとReadMemory
、必要な値が得られます (したがって、正しいプロセスとすべてがあることがわかります)。
MemoryHandler
クラスは正常に機能しているため、投稿していません
私が64ビットのWindowsを使用しているという事実と何か関係があるのでしょうか? ゲームは 32 ビットです (「Program Files (x86)」フォルダーにインストールされます)。
public partial class MainForm : Form
{
Process myProcess = Process.GetProcessesByName("ffxiv").FirstOrDefault();
public MainForm()
{
InitializeComponent();
}
private void startButton_Click(object sender, EventArgs e)
{
IntPtr baseAddress = myProcess.MainModule.BaseAddress;
Console.WriteLine("Base Address: " + baseAddress.ToString("X"));
IntPtr newAddr = IntPtr.Add(baseAddress, 0xF8BEFC);
IntPtr finalAddr = IntPtr.Add(newAddr, 0x1690);
int bytesRead;
byte[] memoryOutput = MemoryHandler.ReadMemory(myProcess, finalAddr, 4, out bytesRead);
int value = BitConverter.ToInt32(memoryOutput, 0);
Console.WriteLine("Read Value: " + value);
}
}
編集:ベースアドレスは正しかった、ポインタに関する私のコードロジックは間違っていた、以下の完全な回答を参照してください。