在预处理阶段不断折叠

时间:2013-02-28 15:26:08

标签: c gcc scripting deobfuscation constantfolding

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

switch (9263 + 1505) {
case 1505 + 41131 + 6729 + 2347:
            ...
case 1505 + 41131 + 6729 + 2347 + 1:
            ...
case 1505 + 41131 + 6729 + 2347 + 2:
            ...

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

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

1 个答案:

答案 0 :(得分:4)

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

这样的事情应该有效:

clang -emit-llvm source.cpp -o - | llc -march=c