我已经在网上搜索了几个小时,但我一生都无法理解为什么下面的代码不起作用。
为进程提取的基地址似乎是错误的。如果我将结束地址直接硬编码到 中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);
}
}
编辑:基地址是正确的,我围绕指针的代码逻辑是错误的,请参阅下面的完整答案。