我目前正在从事一个C项目,该项目与其他程序集代码有很大的接口。我们正在使用自制的控制块和结构的可视化,我锁定了一个如何自动化这个过程的过程。
由于我们对每个组装控制块都有一个C结构等效,而且我们正在为一个非常罕见的体系结构编程,所以最简单的方法可能是可视化C结构。
我或多或少地在寻找一种方法,从TCP wiki页面自动获得"TCP伪校验和计算(IPv6)伪头“这样的图形:
用于校验和计算的TCP伪头(IPv6)
遗憾的是,我还没有发现任何开源工具能够从C头文件中生成这样的可视化。是否有一种方法可以生成这样的图像或html表示而无需手动编写它们?
编辑:由于Alexey的想法,有了实用工具,就有可能从对象文件的矮小部分提取所有使用过的结构的真正内存布局。
发布于 2016-03-11 09:37:44
其中一种方法是用这些结构编译C代码,并从对象/可执行文件的调试信息中提取结构信息。否则,您将查找/制作结构解析器或破解clang。
UPD:从未尝试过,但有pycparser解析器,这可能很有用。
发布于 2016-03-11 09:38:52
发布于 2018-05-10 22:00:30
我正在开发一个C工具箱,它可以,除其他外,图表C类型的任何复杂性。它导入并理解用"-g“编译的代码中的Dwarf信息,并且可以以”点“格式(可以通过任意数量的工具显示)抛出任何您想要的东西。
(它也是一种编程语言,它使用这种Dwarf理解能力直接访问库/程序内部,在运行时使用零粘合代码或链接。)
请参阅:https://github.com/jasonnyberg/j2/wiki/Diagramming-C-types-using-j2
j2系统可以读取和理解Dwarf信息;作为调试特性,它还可以转储以“点”语言形式选择的项,这允许以图形形式显示类型信息层次结构。“堆栈”函数在解释器的堆栈顶层显示项,它还将这些项转储到/tmp/VMRES_STACK.dot。
要绘制一个项的关系图,所需要的就是按名称引用它(如果它不在堆栈上),然后用“堆栈!”调用堆栈函数!(它通过名称引用函数“堆栈”,然后通过"!“对其进行计算。)(操作员)
一旦您运行了解释器(请参阅上面的解释器本身链接和转储结构图的实际示例运行),只需“导入”库:
j2> loadlib([test/build/libtestlib.so]) @testlib然后,引用导入的结构(将其添加到解释器的堆栈中):
j2> testlib.teststruct最后,C)显示堆栈(作为一个副作用,生成文件/tmp/VMRES_STACK.dot):
j2> stack!包含在/tmp/VMRES_STACK.dot中的图形可以通过许多图形/点查看器中的任意一个显示,例如xdot:
bash> xdot /tmp/VMRES_STACK.dothttps://stackoverflow.com/questions/35936526
复制相似问题