C#的ReadProcessMemory植物大战僵尸进行内存偏移的取值的时候无法取出正确值
本帖最后由 Homely 于 2021-10-12 14:34 编辑static extern bool ReadProcessMemory(int hProcess, IntPtr lpBaseAddress,out int lpBuffer, int nSize, int lpNumberOfBytesRead);
public static extern int OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
private void button1_Click(object sender, EventArgs e)
{
IntPtr hwnd = new IntPtr();
//这里是通过NuGet程序包下载的PInvoke.User32 直接调用的
hwnd = User32.FindWindow("MainWindow", null);
int testID;
int testTD;
int OpenHwnd;
testTD = User32.GetWindowThreadProcessId(hwnd, out testID);
//打开进程
OpenHwnd = OpenProcess(0x1F0FFF, false, testID);
Boolean aa;
IntPtr FistAdd = new IntPtr(0x007578F8);
int dataAddress;
//偏移地址
int[] offsetData = new int[] {0x94c,0x50};
//源地址
aa = ReadProcessMemory(OpenHwnd, FistAdd, out dataAddress, 4, 0);
//一次偏移
FistAdd = IntPtr.Add(FistAdd, offsetData);
aa = ReadProcessMemory(OpenHwnd, FistAdd, out dataAddress,4,0);
//二次偏移
aa = ReadProcessMemory(OpenHwnd, IntPtr.Add(FistAdd, offsetData), out dataAddress, 4, 0);
}
第一次获取值的跟CE一样的。
第一次偏移过后取值就一直为0,https://p.pstatp.com/origin/pgc-image/1ce7f4b08e18452d99cd2c98cd255410
第二次偏移取值也为0,
就是不知道问题出在哪里了,求大佬解答一下。
我一直用的NuGet的memory.dll_x32 lxwan 发表于 2021-10-12 00:17
我一直用的NuGet的memory.dll_x32
没有搜索到呢。 可否截图下,谢谢大佬。
Homely 发表于 2021-10-12 00:29
没有搜索到呢。 可否截图下,谢谢大佬。
然后实例化 Mem m = new(); 好厉害,,,,,
跟楼主学习一下 二级偏移计算 不应该是用 一级偏移计算出的dataAddress + 二级偏移吗 怎么还用inp+二级偏移 幽溪左畔 发表于 2021-10-12 11:59
二级偏移计算 不应该是用 一级偏移计算出的dataAddress + 二级偏移吗 怎么还用inp+二级偏移
Boolean aa;
IntPtr FistAdd = new IntPtr(0x007578F8);
int dataAddress;
//偏移地址
int[] offsetData = new int[] {0x94c,0x50};
//源地址
aa = ReadProcessMemory(OpenHwnd, FistAdd, out dataAddress, 4, 0);
//一次偏移
FistAdd = IntPtr.Add(FistAdd, offsetData);
aa = ReadProcessMemory(OpenHwnd, FistAdd, out dataAddress,4,0);
//二次偏移
aa = ReadProcessMemory(OpenHwnd, IntPtr.Add(FistAdd, offsetData), out dataAddress, 4, 0);
那是之前写的代码逻辑写错了。我修改了代码后依旧是一样的情况。 还是偏移计算错了吧,你这样写的一次二次便宜都是基址+固定数值,相当于都是硬编码了吧。
一次偏移应该是读出来的 dataAddress+offsetData,而不是你的FistAdd = IntPtr.Add(FistAdd, offsetData); chinasmu 发表于 2021-10-12 15:09
还是偏移计算错了吧,你这样写的一次二次便宜都是基址+固定数值,相当于都是硬编码了吧。
一次偏移应该是 ...
大佬的意思是修改成这样的吗 ,
第一次偏移是 FistAdd=FistAdd+offsetData;
第二次偏移是 FistAdd=FistAdd+offsetData;
但是这样我测试过一次一样的是错误的。。 Homely 发表于 2021-10-12 16:27
大佬的意思是修改成这样的吗 ,
第一次偏移是 FistAdd=FistAdd+offsetData;
第二次偏移是 FistAdd=F ...
你说的修改跟不改有什么区别吗?
你还是没搞明白
页:
[1]
2