【问题标题】:Get a numeric value or string from an address of an attached process从附加进程的地址获取数值或字符串
【发布时间】: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


【解决方案1】:

当然,相反的过程就是你所拥有的相反,即:

byte[] statBytes = GetMemory(0x0175914a);
int stat = BitConverter.ToInt32(statBytes);
statNumericUpDown.Value = stat;

密钥是BitConverter.ToInt32,用于将字节[] 转换为Int32

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多