我正在寻找从二进制文件提供重建控制流图同时支持多个平台(例如 x86、x64、arm)的项目。例如,考虑这个简短的汇编程序:
.global main
.intel_syntax noprefix
.extern getchar
.extern printf
.section .data
jmpTable:
    .long _stub0
    .long _stub1
    .long _stub2
fmt: .asciz "%x\n"
.section .text
main:
    call getchar
    mov dl, 4
    imul dl
    add eax, offset jmpTable
    jmp [eax]
    .long 3851
_stub0:
    mov eax, 0
    jmp end
    .long 3851
_stub1:
    mov eax, 1
    jmp end
    .long 3851
_stub2:
    mov eax, 2
    jmp end
    .long 3851
end:
    push eax
    push offset fmt
    call printf
    add esp, 8
    ret
我考虑过的项目:
- IDA(迄今为止最好的,提取痛苦)
 - BARF(天真、有限的方法)
 - Angr(容易中断或永远计算)
 - Radare2(是否有任何api可以导出cfg数据?)
 - JakStab(仅限于 x86)
 
相当明显的选择,不过,导出一个过程间 CFG 仍然很痛苦。此外,虽然它能够找到此示例的所有基本块,但它会遗漏所有间接边。
这些项目应该提供一些 API 来提供 cfg。我知道仅用静态分析解决这个问题可能是不可行的。我正在寻找一种尽力而为的方法。