首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化多个ReadProcessMemory调用

简化多个ReadProcessMemory调用
EN

Stack Overflow用户
提问于 2015-11-27 20:29:40
回答 1查看 236关注 0票数 0

最近,为了能够从正在运行的进程的内存中读取数据,我开始了一些欺骗引擎的实验,并无意中发现了本教程的步骤8。我想从存储在[[[[[0x00645390]+0xC]+0x14]+0x0]+0x18]中的应用程序中读取我正在读取的第二个进程的一个特定值,0x00645390是静态的。

目前,它与以下疯狂指针处理片段一起工作:

代码语言:javascript
复制
::ReadProcessMemory(hProcess, (void *)0x00645390,           (void *)&dwAddress, sizeof(dwAddress), NULL);
::ReadProcessMemory(hProcess, (void *)(dwAddress + 0xc),    (void *)&dwAddress, sizeof(dwAddress), NULL);
::ReadProcessMemory(hProcess, (void *)(dwAddress + 0x14),   (void *)&dwAddress, sizeof(dwAddress), NULL);
::ReadProcessMemory(hProcess, (void *)(dwAddress),          (void *)&dwAddress, sizeof(dwAddress), NULL);
::ReadProcessMemory(hProcess, (void *)(dwAddress + 0x18),   (void *)&dwValue,   sizeof(dwAddress), NULL);

我想知道是否有一个函数或一个较短的符号,当我有基本的附加和一些偏移时,我可以使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-27 20:37:44

当然,您可以使用以下静态数组:

代码语言:javascript
复制
int offset[] = { 0, 12, 20, 0, 24 };/* (or 0xC, 0x14,m 0, 0x18) */

dwAddress = 0x00645390;
for( auto i : offset)
    ::ReadProcessMemory(hProcess, (void *)(dwAddress + i),
                        (void *)&dwAddress, sizeof(dwAddress), NULL);
dwValue = dwAddress;

不确定它会有多大收获。

您所做的基本上是遵循一组指针,因此:

代码语言:javascript
复制
 global->something->other->thingy->value

您需要在每个级别读取每个指针,因此读取所有地址没有快捷方式。这也适用于编译器必须访问长指针链时每个指针必须在指针所指向的元素被访问之前读取。

(我不确定里面有足够的元素,但这个概念适用)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33964450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档