【问题标题】:Analyzing code programmatically using Visual Studio compiler使用 Visual Studio 编译器以编程方式分析代码
【发布时间】: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


【解决方案1】:

事实证明,Clang 是完成这项任务的不错选择。
使用 Clang,我能够创建一个工具,生成所需的输出,其中包含 C++ 文件中定义的 C++ 类描述。

【讨论】:

  • 包括偏移量?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多