需要一个C语言结构体解析器

5
假设我有一个名为 system.h 的文件,其中包含以下结构体。
typedef struct Foo {
  int count;
  uint32 world;
  Temp id;
} Foo;

typedef struct Temp {
  uint64 id;
} Temp;

Foo bar;

现在我需要一个宏,类似于DUMP_STRUCT(bar),可以递归地打印出bar(类型为Foo)的所有成员。
是否有任何解析器/脚本(最好是使用php/python),可以解析C文件或从可执行文件中获取dwarf信息,并创建类似于DUMP_STRUCT的函数?
4个回答

2

1
如果您的C头文件包含C头文件通常包含的内容(宏、预处理器条件、包含、位字段),则需要完整的C解析器来处理头文件。
GCC-XML可能会生成您所需的内容(它不完全支持"C",而是支持C++),以XML文本形式转储各种结构插槽及其类型;您需要在遍历数据结构的代码中进行调整。为此,您可能需要匹配类型声明的子结构(作为感兴趣的形状/内容的XML子树)。

我们的DMS软件重构工具包及其C前端可以进行完整的预处理/解析/构建符号表。您可以从中生成GCC-XML的输出,但更容易的方法是简单地定制DMS以遍历各种符号表和AST以提取所需内容。匹配过程更容易,因为符号表旨在方便访问命名空间的结构、其中的符号条目以及它们的类型信息(已设置为数据结构)。DMS还提供了表面语法模式匹配,既可用于识别感兴趣的AST,也可用作代码生成器以生成不会出现语法错误的代码。


1
你可以使用GCCXML,它可以解析带有一些限制的C和C++头文件,并以XML格式输出。

1

您可以通过研究pstruct的工作方式来获得一些收益。(我认为它是用Perl编写的,但使用编译器的stab调试信息来输出有关结构布局的信息)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接