【发布时间】:2018-03-20 23:41:32
【问题描述】:
我想为不可执行的二进制文件生成一个控制流图。目的是对生成的 Linux 内核二进制文件进行静态分析。有什么工具可以做到这一点吗?我通过搜索找到的工具仅适用于可执行文件。
我使用 obj-dump 将二进制文件反汇编为程序集。目前,我对汇编基本块进行分析,但是在这种方法中,我不能保证是否覆盖了所有的执行路径。
【问题讨论】:
-
Linux 内核是一个标准的 ELF 可执行文件,压缩并打包到一个 bzImage 文件中,该文件可以解压缩存储在其中的内核。您可以获取生成您尝试分析的“vmlinuz”文件的未压缩“vmlinux”内核,也可以从 vmlinuz 文件中提取它。
-
谢谢。但是,我想分析内核的各个文件(编译时创建的.o文件,例如linux/mm/mmap.o)
-
您可以使用
ld --unresolved-symbols=ignore-all将目标文件转换为可执行文件,尽管这会将所有外部函数解析到同一地址:0。 -
在您的项目中是否有硬性要求只能在构建二进制文件后对其进行分析?如果不是,则在编译期间分析也是一种选择。 GCC 插件可以帮助您对 CFG 进行各种分析。虽然可能不是很容易使用(文档非常稀缺)但仍然很有帮助。
标签: assembly linux-kernel static-analysis object-files control-flow-graph