【发布时间】:2013-12-15 20:11:31
【问题描述】:
我正在构建一个小工具,它允许我实时编辑附加进程的内存。
所以该工具有 1 个 numericUpDown 和 2 个按钮,一个 get 和一个 set。
我的设置代码如下
private void sendButton_Click(object sender, EventArgs e)
{
byte[] stat = BitConverter.GetBytes(Convert.ToInt32(statNumericUpDown.Value.ToString()));
SetMemory(0x0175914a, stat);
}
我陷入困境的地方是反转该过程,以便我可以从附加的过程中获取数字并将它们发送到我的 numericUpDown。
我希望我解释得足够清楚,任何帮助都将不胜感激。
编辑:更好的解释
我要做的是实时编辑内存,以便从我附加的进程的内存中设置和获取值。所以让我们说在那个过程中有一个我们称之为Wins的值。我知道 Wins 的内存地址是 00000001。在我附加的过程中我说 32 Wins
现在我将手动使用调试器指向 00000001 复制该地址处的字节,转到十六进制到十进制转换器,粘贴复制的字节 (20) 并获得返回值 32
我想要实现的是按下按钮,这一切都由系统完成,并且返回值显示在我的 numericUpDown 控件中
【问题讨论】:
-
我不太确定您要在这里完成什么,但是对于直接读取和写入非托管内存,我建议使用互操作服务(Marshal 类提供了出色的实用程序)。欲了解更多信息,请参阅:msdn.microsoft.com/en-us/library/…
-
我知道如何在我的附加进程中读取和写入内存,该进程由扩展处理。 myextension.setMemory(address, byte) & myextension.GetMemory(address, byte) 为我完成了这项工作。我想要的是一种将指定地址的字节转换为数值然后在我的 numericUpDown 控件中显示该数字的方法
标签: c# memory interop shared-memory