打造自己的反汇编引擎——Intel 指令编码学习报告 作 者 : egogg 时 间 : 2008-10-22,13:28 写在前面: 学习Intel 指令格式已经有近一个月了,本来想把整个反汇编引擎写完整之后再发布源代码和学习报告的,但是,最初的热情过后,剩下的就是辛苦劳动了,现在实在太累了,似乎有点写不下去的感觉了,所以我还是打算,边总结学习的过程,边完成整个反汇编引擎:一方面,希望论坛里对指令解码知识感兴趣的朋友,高手给些鼓励;另一方面,希望能和这些朋友们讨论程序中的bug,讨论整个反汇编引擎的架构(这个我会在后面的学习报告中详细说明我所了解的一些架构)
学习新的知识是一件很令人高兴和满足的事情,但是能和别人分享学习的经验,更令人快乐
学习指令编码格式的好处有很多,我在这里提一些吧: 一、加深对指令的了解
并不是用汇编语言写出的程序速度就一定比其他高级语言快,或者说节省空间,现在大部分的编译器做得比一般的汇编语言初学者,甚至是有一定编程经验的人都好,对一些汇编指令有所了解后,可能利用这些指令写出符合特定条件的好的代码,不管是用在shellcode 还是用在关键代码的性能优化方面都有好处
例如:Svin 的教程中就有一个题目: 用四个byte 实现下列的算法:( opcode hack) IF ZF=1 inc eax ELSE mov al,40 再有,现在的高级语言因为执行效率的原因,一般都舍弃用leave 和 enter 指令,然而这些指令有着空间的优势„„等等,此外,学习了指令编码之后会对intel 的寻址模式有一个更为深刻的了解
二、学习了指令编码可以软件保护中的很多技巧如花指令等有更深刻的了解
三、如果这些小的技巧实在是不值一提,那么如果想些一个虚拟机架构的话,就必须对这些指令有所了解
„„ 由于我是一个菜鸟,所以有很多说不清楚的地方,还希望高手指正