gpt4 book ai didi

c++ - 读取 Win32 变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:01 26 4
gpt4 key购买 nike

如果我可以连接到一个 Win32 进程中,我是否可以:

  • 从进程内部的类中读取变量?

  • 我有上述 Win32 应用程序的完整源代码,我可以将其用作本主题的引用吗?

干杯。

最佳答案

是的。一旦您的模块挂接到进程中,您就共享相同的地址空间。这意味着您可以访问进程分配的内存(例如,为类实例分配的内存)。

如果您知道类实例的偏移量,那么您可以:

  • 将此内存地址转换为指向类的指针(前提是包含类头)
  • 使用此内存地址的偏移量来访问类的成员。

参见 Traversing the Module List在 MSDN 上。一旦你有了 MODULEENTRY32对于您希望“ Hook ”的进程,您可以使用 modBaseAddr 作为偏移量的基础。例如,如果您知道指向类实例的全局变量位于 0x000AD421,您可以这样做:

ClassName *pClassBase = moduleEntry->modBaseAddr + 0x000AD421;
pClassBase->UseSomeFunctions();

unsigned char *pClassBase = moduleEntry->modBaseAddr + 0x000AD421; // if we don't know the exact definition of the class we want to play with
float flMemberValue = *reinterpret_cast<float*>((unsigned char *)pClassBase + 24); // float member value at offset 24
// value of member is flMemberValue

*reinterpret_cast<float*>((unsigned char *)pClassBase + 24) = 15.25; // setting the same member value to 15.25.

正如其他评论者所说,找到类基的偏移量是这个过程中最难的部分。但是,如果您手边有类定义,这实际上是您唯一需要做的工作(即,您不必也找到类成员偏移量)。

关于c++ - 读取 Win32 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com