根据其实例在另一个进程中的地址获取类名

问题描述

我正在寻找任何可以帮助我偏离string GetRTTIClassName(IntPtr ProcessHandle,IntPtr StructAddress)的东西。该函数将使用另一个(第三方)应用程序的进程句柄来获取位于其内存中特定地址的结构名称(如果有的话)。

我能找到的所有 RTTI 问题/文档都与它在同一应用程序中使用有关,与进程互操作无关。唯一接近我正在寻找的东西是 this module in Cheat Engine's source code(这也是我首先发现它是可能的),但它有十多个嵌套的特定于语言的依赖项,更不用说事实上,无论如何,Lazarus 不会让我在项目上下文之外构建它。

如果您知道有关我所描述内容代码示例、库、文档,或者只是有关访问其他应用的低级元数据的信息(请原谅我的法语),请分享它们。如果它有所作为,我的目标是 C#。


编辑:从我收集到的信息来看,运行时信息的存储方式取决于编译器,所以我会提到我正在“探索”的第三方应用程序是一个 MSVC 项目。

据我所知,我需要:

  1. 根据其实例的地址获取结构的地址;
  2. 从结构地址开始,通过指针导航找到它的名称(可能是“装饰的”)。

我还发现了一个更易读的 C# implementation 和一堆关于倒车的文章(适用于第 2 步),但我似乎找不到第 1 步。

我会在找到更多信息时更新/评论,但现在我在挖掘这些低级内容时头疼。

解决方法

这是一个很长的指针阶梯。我已经转录了 the solution ReClass.NET uses 来清理没有依赖项的 C#。

结果库可以在 here 中找到。