使用Visual Studio编译器以编程方式分析代码
Analyzing code programmatically using Visual Studio compiler
我需要从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++类描述生成所需的输出。
相关文章:
- 在c代码之间共享数据的最佳方式
- 不同/较旧的处理器运行c++代码的方式是否不同
- 如何以静态代码分析友好的方式使用 #define 防护?
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 为什么我的代码在添加不相关的代码行后工作方式不同?
- 在Qt Creator中应用代码更改的快捷方式是什么?
- 如何在运行时以选择性方式排除代码块
- 如何以这种方式在 C++ 中打印 ASCII 代码值
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- 以有效的方式从 Node .js运行 C 或C++代码
- 如何在现有 c++ 代码中以功能方式实现遥测
- 视觉工作室代码远程调试C 类似Netbeans的方式
- 在某些代码中覆盖方法的方式是什么?
- 以简单且更少的代码方式将字符串添加在一起
- 以迭代方式编写递归代码
- 为什么相同的代码在Visual Studio和Dev-C++中运行方式不同
- 为什么这段代码在Mac和Red Hat中的运行方式如此不同
- 我可以以某种方式将 Maple 过程包含在C++代码中吗?