【问题标题】:Controlling memory variables [closed]控制内存变量
【发布时间】:2011-08-08 23:07:51
【问题描述】:

我不知道该怎么问这个问题。我想通过定位内存地址来控制存储在内存中的数据等等。有点像作弊引擎,但我打算这样做如果可以轻松完成,则在 MASM 中执行此操作。如果不是,我想在 C# 中执行此操作(如果也可以的话)。我最后的选择是 C++。

【问题讨论】:

  • 那么您想找出特定模式(数字或字符串)在哪个内存地址中?
  • 必须比“什么不”更具体一点......操纵另一个进程的内存将是未定义的行为或充其量是hackish。你真正想做什么?
  • 我真的在尝试操作内存中的数据。正如我的问题所述。
  • 什么数据在什么内存里?您的进程中的任何物理内存地址或内存或另一个进程中的内存?

标签: c# c++ memory assembly masm


【解决方案1】:

一个用户进程不能访问其他进程的内存。您将需要处理内核。

【讨论】:

  • +1 这就是作弊引擎的做法
  • 推测攻击的途径将是注入另一个进程; Windows 让这变得相当容易......
【解决方案2】:

在汇编中,你可以做的只是从特定的内存地址读取和写入。例如:

mov eax, 0x12345678
mov 0x87654321, [eax]

0x87654321 写入内存地址0x12345678。你可以在 C 或 C++ 中做同样的事情:

unsigned int *p = (int *)0x12345678;
*p = 0x87654321;

我不知道C#,但是如果它有指针,你可以做到!

【讨论】:

  • 但是 VMM 会阻止一个进程在另一个进程中读取或写入内存。事实上,两个进程可能有不同的页面映射到同一个地址空间!
  • 这不会导致分段错误吗?
  • 我想我误解了 OP 的问题 - 如果您可以读写物理内存,那么您就可以回家了。 @BlackBear - 如果 0x12345678 是有效指针,则不是......
  • @Carl 现代操作系统(即所有操作系统)不允许您在程序范围之外执行此操作;只有内核模块才能真正访问所有内存
  • @Will,或引导加载程序,或嵌入式设备,或任何其他低级应用程序.....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
相关资源
最近更新 更多