【发布时间】:2016-02-14 10:07:57
【问题描述】:
我已经在网上搜索了几个小时,但我一生都无法理解为什么下面的代码不起作用。
为进程拉取的基地址似乎有误。如果我将结束地址直接硬编码到 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);
}
}
编辑:基地址是正确的,我围绕指针的代码逻辑是错误的,请参阅下面的完整答案。
【问题讨论】:
-
基地址得到什么样的值,你怎么知道“正确”的值是什么?
-
Scott,我知道使用 Cheat Engine 的正确地址是什么(因此我得到的是错误的)。例如,这就是我如何找到指向该游戏 HP 的基本指针的方式。它告诉我 ffxiv.exe 应该有什么地址,它与我的 C# 代码给我的不同。然而,最有力的证据是,读取内存的最终输出并没有给出我的 hp(如果我将在作弊引擎中找到的最低级别地址直接硬编码到上面的读取内存函数中,我会得到正确的值)。
-
您的代码返回什么值?什么是正确的值?在 Process Explorer 中检查正确的值。
-
这并不重要,因为低级地址是动态的,但在 12 月份我应该得到 9460301(用作弊引擎验证),但我得到 1220000。这些数字自然只适用于上述进程的当前实例(重新启动时,这些会改变)。
-
模块的基地址不会是奇数!