gcc编译器和mysql源码哪个难_编译器和反编译器哪个厉害,哪个更难于编写?

反编译器更难。

编译器主要的难点还是在代码优化上,包括中间层以及后端的优化,后端代码生成(生成汇编代码以及汇编至二进制)只能算是基本操作。

楼主说的反编译器准备来说是有两个部分:一是反汇编器,将binary反汇编至汇编码;二是反编译器,将汇编码转成可读性较好的伪码。

首先,反汇编器难点主要在于反向编译器的“基本操作”,说白了就是将binary根据解码规则进行汇编解码。反汇编常见手段包括线性扫描以及递归下降,现在常见的反汇编器都是用的递归下降。虽然解码规则是固定的,但是难点在于判断哪些是代码,需要对哪些二进制做解码。

其次,就算反汇编成功无误,接下来就是反编译操作。由于编译器的优化和转换,汇编代码同源码已经有很大的改变以及信息的丢失。反编译器需要解析汇编代码,分析语义,分析控制流,分析数据流。然后根据汇编层的CFG做模板匹配,推测哪些是if-else语句,哪些是for/while循环,从而生成伪码。

===================== 补充 =======================

承认编译器的编写有很多的技术难点,但是不论是“古老的”GCC,还是“先进的”LLVM,已经有很成熟的框架了,很多技术难度已经被突破,也有很多的技术积累的了,现在的难点主要还是怎么才能做的更好;

Disassembler以及Decompiler原理上也是依赖很多编译器相关的技术,很多Decompiler也有自己的IR,并基于IR做相关的分析,包括控制流构建、Dom-Tree构建,数据流分析等等。

说白了,Disassembler以及Decompiler也可以认为是一种特殊的编译器,输入是机器语言,输出的是可读性较好的伪码。但由于“逆向行驶”会有很多信息的丢失,导致难度陡增。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值