gcc生成函数和变量名列表

时间:2017-02-16 14:43:33

标签: c gcc

我正在寻找一种获取一组c源文件的所有函数和变量名列表的方法。我知道gcc在编译和链接时会破坏这些元素,那么有没有办法捎带这个过程呢?或者任何其他可以做同样事情的工具?

编辑:这主要是因为我很好奇,我一直在玩像自动依赖和图形包括树这样的东西,并希望能够在源文件上获得更多的统计数据。它似乎已经存在但我还没有找到任何选项或标志。

1 个答案:

答案 0 :(得分:5)

如果您只对全局函数和变量的名称感兴趣,您可能(假设您使用的是Linux)使用nmobjdump实用程序{{1}}或{{1}}实用程序3}}二进制ELFexecutable

否则,您可以通过object files自定义GCC编译器(假设您有最新版本,例如至少5.3或6)。您可以直接在C ++中对它们进行编码,或者您可以考虑使用plugins,一种类似Lisp的域特定语言来自定义GCC。甚至GCC MELT的GCC MELT也许就够了......

如果您考虑延长GCC,请注意您需要花费大量时间(可能是几个月)了解其内部表示(特别是findgimple mode& {{3详细说明。 GCC MELT Generic Trees上的链接和幻灯片可能很有用。

您的主要问题是您可能需要了解有关GCC内部表示的大部分细节,这需要时间!

此外,GCC内部细节从一个版本的GCC略有变化到下一个版本。

你也可以考虑(而不是在GCC内部工作)使用Gimple框架(但学习也是很多时间)。也许您也可以查看documentation pageClang/LLVM

另一种方法可能是使用调试信息进行编译并解析Frama-C信息。

PS。我的观点是你的问题可能比你认为的更难。解析C并不是那么简单......你可能花费数月甚至数年的时间来研究......而且细节可能是目标处理器&系统与特定编译器......