使用Visual Studio编译器以编程方式分析代码

Analyzing code programmatically using Visual Studio compiler

本文关键字:方式 代码 编程 Visual Studio 编译器 使用      更新时间:2023-10-16

我需要从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]

Clang已被证明是完成此任务的一个很好的选择。
使用Clang,我能够创建一个工具,根据c++文件中定义的c++类描述生成所需的输出。