c#根据基址循环读取内存中尝试读取或写入受保护的内存System.AccessViolationException异常的处理和步骤方法
系统中一旦出现这个异常,会直接终止进程,try catch捕捉不到,导致程序崩溃。
只能在引发这个异常的方法上添加[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
这样程序就会跳过这个异常
如下:
//读取内存中的值
[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
public static int ReadMemoryValue(int baseAddress,string processName)
{
try
{
byte[] buffer = new byte[4];
IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0);//获取缓冲区地址
IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName));
ReadProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, 4, IntPtr.Zero); //将制定内存中的值读入
CloseHandle(hProcess);
return Marshal.ReadInt32(byteAddress);
}
catch(System.AccessViolationException)
{
return 0;
}
}