【问题标题】:Low level programming: How to find data in a memory of another running process?低级编程:如何在另一个正在运行的进程的内存中查找数据?
【发布时间】:2010-10-15 06:58:41
【问题描述】:

我正在尝试通过从游戏的进程内存中提取值来为游戏编写统计工具(因为没有其他方法)。最大的挑战是找出存储我感兴趣的数据所需的地址。更难的是动态内存分配——我不仅需要找到存储数据的地址,还需要找到指向这些内存块的指针,因为每次游戏重新启动时地址都会发生变化。

目前,我只是使用内存编辑器 (ArtMoney) 手动搜索游戏内存,并寻找随着数据更改(或不更改)而更改其值的地址。找到地址后,我正在寻找一个以类似方式指向该内存块的指针。

我想知道有哪些技术/工具可用于此类任务?也许有一些我可以阅读的文章?掌握反汇编程序是唯一的出路吗?例如,游戏培训师正在解决类似的任务,但他们在几天内就完成了,而我已经挣扎了好几个星期。

谢谢。

PS。都在windows下。

【问题讨论】:

  • 你能指定哪个平台吗?

标签: memory assembly process reverse-engineering low-level


【解决方案1】:

掌握反汇编程序是唯一的出路吗?

是的;去http://www.microsoft.com/whdc/devtools/debugging/default.mspx下载WinDbg,或者如果你有一些钱要花,IDA Pro可能是最好的工具

【讨论】:

  • 但是即使使用反汇编程序,查找值的策略是什么?分解数百兆字节并试图弄清楚那里发生了什么对我来说似乎是不可能完成的任务。从哪里开始?
  • 不要只搜索所有内存,尝试找到更新您感兴趣的值的函数;设置调试器断点,每次点击它们时打印内容
【解决方案2】:

如果您知道如何用 C 编写代码,则很容易搜索内存值。如果您不懂 C,如果您可以用 C# 编写代码,这个page 可能会为您指出您的解决方案。将他们拥有的 C# 移植到 Java 并不难。

【讨论】:

    【解决方案3】:

    您可以查看DynInst(动态仪器)。特别是看Dynamic Probe Class Library (DPCL)。这些工具将允许您通过调试器接口附加到正在运行的进程,并在它们运行时将您自己的工具(通过特殊的探针类)插入其中。您可能会使用它来检测访问您的数据结构的例程,并在创建或修改您感兴趣的值时进行跟踪。

    这样做可能比手动执行所有操作更容易。这些页面上有很多论文,您可以查看其他人如何构建类似的工具。

    我相信 Windows 支持得到维护,但我自己没有使用它。

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2014-02-23
      • 2016-10-26
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多