Memory 低级编程:如何在另一个正在运行的进程的内存中查找数据?

Memory 低级编程:如何在另一个正在运行的进程的内存中查找数据?,memory,assembly,process,reverse-engineering,low-level,Memory,Assembly,Process,Reverse Engineering,Low Level,我试图通过从游戏的进程内存中提取值来为游戏编写一个统计工具(因为没有其他方法)。最大的挑战是找到存储我感兴趣的数据所需的地址。更困难的是动态内存分配——我不仅需要找到存储数据的地址,还需要找到指向这些内存块的指针,因为每次游戏重新启动时,地址都在变化 目前,我只是使用内存编辑器(ArtMoney)手动搜索游戏内存,并查找随着数据更改(或不更改)而更改其值的地址。找到地址后,我正在寻找一个指针,它以类似的方式指向这个内存块 我想知道有哪些技术/工具可用于此类任务?也许有一些文章我可以读?掌握反汇编

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

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

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

谢谢


另外,它都在windows下。

如果你知道如何用C编写代码,那么搜索内存值就很容易了。如果您不懂C语言,如果您能用C语言编写代码,这可能会为您指明解决方案。将C移植到Java并不困难

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

对,;从下载WinDbg,或者如果你有一些钱要花,IDA Pro可能是最好的工具,你可以看看(动态仪器)。特别是,请看。这些工具将允许您通过调试器接口连接到正在运行的进程,并在进程运行时将您自己的指令插入其中(通过特殊的探测类)。当您感兴趣的值被创建或修改时,您可能会使用它来检测访问数据结构和跟踪的例程

这样做可能比手工操作更容易。这些页面上有很多文章,你可以看看其他人是如何构建类似工具的


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

您可以指定哪个平台吗?但即使使用反汇编程序,查找值的策略是什么?对我来说,分解数百兆字节并试图弄清楚那里发生了什么似乎是不可能完成的任务。从哪里开始?不要只是搜索所有的内存,试着找到更新你感兴趣的值的函数;设置调试器断点,以便在每次点击时打印内容