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

Get class name based on address of its instance in another process

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

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

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


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

据我所知,我需要:

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

我还找到了更具可读性的 C# implementation 和一堆关于逆向的文章(适用于第 2 步),但我似乎找不到第 1 步。

我会 update/comment 当我找到更多信息时,但现在我正为深入研究这些低级内容而头疼。

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

可以找到生成的库 here