在预处理阶段不断折叠

Pav*_*kov 5 c scripting gcc deobfuscation constantfolding

我有一段需要反混淆的C代码.它包含一堆棘手的宏.我通过C预处理器和缩进运行代码,现在看起来类似于:

switch (9263 + 1505) {
case 1505 + 41131 + 6729 + 2347:
            ...
case 1505 + 41131 + 6729 + 2347 + 1:
            ...
case 1505 + 41131 + 6729 + 2347 + 2:
            ...
Run Code Online (Sandbox Code Playgroud)

为了简化进一步的分析,我正在寻找一些可以折叠代码中所有常量的工具.我知道C预处理器无法做到这一点,并且在编译阶段将执行常量折叠优化.但是源代码怎么样?

Shell脚本也很受欢迎,因为我怀疑这可能是唯一的方法.

Rah*_*jee 4

使用clang对其进行编译,并使用其c后端生成c代码。

像这样的东西应该有效:

clang -emit-llvm source.cpp -o - | llc -march=c
Run Code Online (Sandbox Code Playgroud)