前言 |
转自老罗
“不管现在流行什么语言,你都可以肯定十年二十年之后它不再风光。我总是在自己的书中写些不时髦的东西,但这些东西却值得后代子孙记取。”
-- Donald E. Knuth
为什么要学习OpCode?
随着学习的深入和知识的积累,各位编程爱好者都一定不再满足于语言和表层知识的学习,而开始对系统的一些底层知识感到好奇,进而逐渐往深层次探究。正当我们为微软一轮轮的技术革新而强迫自己努力学习的时候,我们可曾花时间去考虑一些深层次的东西?
在编译器后端设计、反汇编器、病毒、破解等底层领域中,处处可见OpCode的影子,奇怪的是,很少有人真正深入地去研究这个领域的东西。一种技术的发展和流行,关键是要有好的书籍/教程作为指引,目前比较规范的中文的OpCode教程好像还没有,于是很多人在这个问题上,都只是处于摸索阶段,没有抓住问题的核心。在这里,希望能与大家分享一些我的经验和教训。
版权声明
本教程是完全免费和自由的,你可以自由拷贝,但请注明转载的出处。内容的大部分是翻译自国外的一些OpCode教程和资料,以及Intel的<<Instruction Set Reference>>,少部分是我的经验总结。参考资料将在下面给出。
准备工作
在开始之前,请先做好以下的准备:
- 下载:<<IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference>>
- 下载:<<AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions>>
参考资料
- 最权威的 <<IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference>>
- 同样权威的 <<AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions>>
- 俄罗斯大哥The Svin
的OpCode系列教程使我入了门。原文可以在board.win32asmcommunity.net通过搜索关键字“OpCode”找到。 - AoD也是一份英文OpCode教程。
关于作者
罗聪,研究兴趣为算法和数据结构、编译原理等,可以通过电子邮件地址 lcother@163.net 与我联系。个人主页是:老罗的缤纷天地。