【发布时间】:2023-04-08 14:16:01
【问题描述】:
我需要以编程方式从 C++ 代码片段构建一个列表,类似于在 Visual Studio 中使用 /d1reportAllClassLayout 参数编译代码(参见 https://pigworlds.wordpress.com/2009/01/17/msvc-compiler-d1reportsingleclasslayout-d1reportallclasslayout/ 以获取参考和示例)。此列表应包括自定义格式的类成员和虚函数表信息(类成员名称、类型和偏移量)。
为此,我需要以某种方式访问由 Visual Studio 编译器生成的 AST。从 C++ 代码生成这个清单的任务可以使用 Clang 来实现,但我的任务的细节是这个清单中的所有数据(成员名称、类型和偏移量)应该与 Visual Studio 编译器的相同。例如,我不确定 Clang 是否会在结构中生成与 Visual Studio 编译器相同的成员偏移量。
谁能指出我实现这一目标的正确方向? Clang 实际上是否足以达到此目的(我还不太熟悉)还是我应该编写 Visual Studio 扩展?
附:我知道这个问题可能不是很好,因为我目前对该主题的了解非常模糊。如果我能更好地了解解决任务的实际需要,我已经准备好改进它。
编辑: 这是我需要编写的列表示例:
ClassA
offset | name | size | C++ type
0x00 | {vfptr} | 4 | ClassA::$vftable
0x04 | mID | 4 | unsigned int
0x08 | mColor | 16 | CColor
0x18 | mpFunc | 4 | void (__cdecl *)(char isVisible)
0x1C | mBuffer | 16 | char[16]
【问题讨论】:
-
您要进行什么样的分析?您是否试图找出逻辑依赖关系、代码的结构等?还是您对编译器生成的程序集的结构更感兴趣?
-
我需要收集并打印自定义格式的数据类型信息:代码中声明的结构列表及其成员名称、偏移量和类型。 /d1reportAllClassLayout 报告与我需要实现的非常相似,只是它缺少结构成员类型。
-
这只是告诉我你正在寻找什么信息,我正在寻找更多你打算如何处理一旦获得的信息,这就是你将从该信息构建的分析.
-
我要将这些信息加载到 IDA 反汇编程序中。
标签: c++ visual-studio parsing clang abstract-syntax-tree