使用 Visual Studio 编译器以编程方式分析代码
Analyzing code programmatically using Visual Studio compiler
我需要以编程方式从 C++ 代码片段构建一个列表,类似于在 Visual Studio 中使用 /d1reportAllClassLayout 参数编译代码(参见 https://pigworlds.wordpress.com/2009/01/17/msvc-compiler-d1reportsingleclasslayout-d1reportallclasslayout/ 以获取参考和示例)。此列表应包含自定义格式的 class 成员和虚函数 table 信息(class 成员名称、类型和偏移量)。
为此,我需要以某种方式访问 Visual Studio 编译器生成的 AST。从 C++ 代码生成这个列表的任务可以使用 Clang 来实现,但我的任务的细节是这个列表中的所有数据(成员名称、类型和偏移量)应该与 Visual Studio 编译器的数据相同。例如,我不确定 Clang 是否会在结构中生成与 Visual Studio 编译器相同的成员偏移量。
谁能指出我实现这一目标的正确方向? Clang 实际上足以满足这个目的(我还不太熟悉它)还是我应该写 Visual Studio 扩展名?
P.S。我知道这个问题可能不是很好,因为目前我对该主题的了解还很模糊。如果我能更好地理解我真正需要什么来解决我的任务,我准备改进它。
编辑:
这是我需要撰写的列表示例:
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]
事实证明,Clang 是完成此任务的不错选择。
使用 Clang,我能够创建一个工具,使用 C++ 类 根据 C++ 文件中的定义生成所需的输出。
我需要以编程方式从 C++ 代码片段构建一个列表,类似于在 Visual Studio 中使用 /d1reportAllClassLayout 参数编译代码(参见 https://pigworlds.wordpress.com/2009/01/17/msvc-compiler-d1reportsingleclasslayout-d1reportallclasslayout/ 以获取参考和示例)。此列表应包含自定义格式的 class 成员和虚函数 table 信息(class 成员名称、类型和偏移量)。
为此,我需要以某种方式访问 Visual Studio 编译器生成的 AST。从 C++ 代码生成这个列表的任务可以使用 Clang 来实现,但我的任务的细节是这个列表中的所有数据(成员名称、类型和偏移量)应该与 Visual Studio 编译器的数据相同。例如,我不确定 Clang 是否会在结构中生成与 Visual Studio 编译器相同的成员偏移量。
谁能指出我实现这一目标的正确方向? Clang 实际上足以满足这个目的(我还不太熟悉它)还是我应该写 Visual Studio 扩展名?
P.S。我知道这个问题可能不是很好,因为目前我对该主题的了解还很模糊。如果我能更好地理解我真正需要什么来解决我的任务,我准备改进它。
编辑: 这是我需要撰写的列表示例:
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]
事实证明,Clang 是完成此任务的不错选择。
使用 Clang,我能够创建一个工具,使用 C++ 类 根据 C++ 文件中的定义生成所需的输出。