我正在尝试用C#制作内存扫描程序。我听说我需要API函数WriteProcessMemory
和ReadProcessMemory
。
我打电话给他们:
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
byte[] lpBuffer,
UInt32 nSize,
ref UInt32 lpNumberOfBytesRead
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
byte[] lpBuffer,
uint nSize,
out UIntPtr lpNumberOfBytesWritten);
我在Google上找到的所有内存扫描仪示例都很难理解。我已经阅读了很多文章说要找到值addr你需要搜索任何内存字节。现在我需要让程序打开从内存中读取和写入的过程。
我可以使用GetProcessByName
吗?
答案 0 :(得分:2)
是的,就像这样:
Process[] process = Process.GetProcessesByName("cmd");
byte[] memory = new byte[255];
uint bytesRead =0;
bool succes = ReadProcessMemory(
process[0].Handle,
process[0].MainModule.BaseAddress ,
memory ,
(uint) memory.Length ,
ref bytesRead);
你必须检查成功是否属实。如果没有,你什么也没读。