gpt4 book ai didi

c# - 使用 OpenProcess 和 ReadProcessMemory 的问题

转载 作者:行者123 更新时间:2023-11-30 04:40:26 28 4
gpt4 key购买 nike

我在实现读取外部进程内存的算法时遇到了一些问题。这是主要代码:

            System.Diagnostics.Process.EnterDebugMode();
IntPtr retValue = WinApi.OpenProcess((int)WinApi.OpenProcess_Access.VMRead | (int)WinApi.OpenProcess_Access.QueryInformation, 0, (uint)_proc.Id);
_procHandle = retValue;

WinApi.MEMORY_BASIC_INFORMATION[] mbia = getMemoryBasicInformation().Where(p => p.State == 0x1000).ToArray();

foreach (WinApi.MEMORY_BASIC_INFORMATION mbi in mbia) {
byte[] buffer = Read((IntPtr)mbi.BaseAddress, mbi.RegionSize);

foreach (IntPtr addr in ByteSearcher.FindInBuffer(buffer, toFind, (IntPtr)0, mbi.RegionSize, increment)) {
yield return addr;
}
}

Read() ... method

if (!WinApi.ReadProcessMemory(_procHandle, address, buffer, size, out numberBytesRead)) {
throw new MemoryReaderException(
string.Format(
"There was an error with ReadProcessMemory()\nGetLastError() = {0}",
WinApi.GetLastError()
));
}

虽然通常它似乎工作正常,但问题是对于某些内存值,ReadProcessMemory 返回 false,而 GetLastError 返回 299。从我用谷歌搜索的内容来看,它似乎发生在 vista 上,因为 OpenProcess 的一些参数已更新.有人知道这是怎么回事吗?我应该尝试什么样的值(value)观?请注意,当它们发生变化时,我不想知道它是否为 VM_READ 左右,我想知道确切的值是什么。

编辑: 可能与不调用 VirtualProtect()/VirtualProtectEx() 有关?如此 SO 网址所示:WriteProcessMemory/ReadProcessMemory fail

Edit2:就是这样! ^^ 这就是解决方案,先调用 VirtualProtectEx(),再调用 ReadProcessMemory()!

最佳答案

C:\Debuggers>kd -z C:\Windows\notepad.exe
0:000> !error 0n299
Error code: (Win32) 0x12b (299) - Only part of a ReadProcessMemory
or WriteProcessMemory request was completed.

这意味着你试图读取一个部分未映射地址的 block (即如果应用程序本身这样做,它就是 AV)

关于c# - 使用 OpenProcess 和 ReadProcessMemory 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1332067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com