我理解,Code Lifting和反编译的概念类似
常规的编译过程是这样的:
这是一个从高级形式到低级形式的过程,一般叫做 lowering
而反编译,是这样一个过程:
这个过程是完全相反的,叫做lifting
需要注意
- Binary到ASM这一步是反汇编,一般编译器都自带这个功能。反汇编是从byte code到汇编代码的过程,有固定的规则,没有花样可以玩儿。
- ASM到IR没有固定的套路,不同的反编译工具有不同的求解方法。
- IR到AST这步是最复杂的。
- AST到源码是遍历语法树,dump出来得到源码。
参考:
基于code lifting的二进制差异消除
https://zhuanlan.zhihu.com/p/341448835