我有一段需要反混淆的C代码。它包含一堆棘手的宏。我通过C预处理器和缩进运行代码,现在它看起来类似于:
switch (9263 + 1505) {
case 1505 + 41131 + 6729 + 2347:
...
case 1505 + 41131 + 6729 + 2347 + 1:
...
case 1505 + 41131 + 6729 + 2347 + 2:
...
为了简化进一步的分析,我正在寻找一些可以折叠代码中所有常量的工具。我知道C预处理器无法做到这一点,并且在编译阶段将执行常量折叠优化。但是源代码呢?
Shell脚本也很受欢迎,因为我怀疑这可能是唯一的方法。
答案 0 :(得分:4)
使用clang编译它,并使用其c后端生成c代码。
这样的事情应该有效:
clang -emit-llvm source.cpp -o - | llc -march=c