走近汇编理解与内核编程

2006年,我工作时的座位坐在wowocock旁边。wowocock写代码的时候代码风格一团糟。满篇都是混乱型的命名、超级跨全工程的全局变量,诡异的跳转。而且屡教不改。但是调程序却很牛,开着WinDbg,基本上不用看源码,也知道发生了什么。

因为不用看源码,所以看Windows内核原有的代码和看自己的代码基本没有太大的区别,只要别跟太远。这样就获得了远远超出一般只能看懂C语言的程序员的能力。许多问题没有前人的指点也可以自己解决。而且能做出很多别人做不出来的事来。

有时候碰到一些问题,比如说在WindowsXP有,但是Windows2000下没有的调用。一般人也就直接放弃了。但是他却会自己去跟踪了XP下调用的实现,然后在2000下写一个替代品出来。其实在安全软件领域,反汇编、自己patch、和crack早已经大行其道。无论你站在邪恶破坏的一方,还是站在正义安全的一方,都不得不这样做。因为应用层病毒的时代早就过去了,rootkit的时代到来了。

这里涉及的到其实是一个理解调试器里的汇编语言的能力的问题。你可以觉得那些rootkit牛人的技术有多强,他们知道很多对你来说闻所未闻的东西。但是实际上他们也可以对你说这其实很简单。因为答案就在调试器窗口里的那堆汇编里。

虽然我大学毕业的时候已经是2002年,但是大学里的汇编语言教材却还停留在8086阶段。无法理喻这种落后性。从实模式编程到保护模式编程是一个飞跃,这个过程在从DOS进化到Windows9X的时候就已经发生。然而我在大学期间里却只学到了实模式的编程,以简单的观念看待X86的CPU,甚至不知道Ring0和Ring3的切换,本质也就是不知道应用与内核的区别。

实际上大部分程序员都是如此。很可能一生都不会再次去接触那一堆汇编语言。当程序崩溃调试器崩出来一堆非C语言的东西,那些只是天书而已。当场关闭然后回头去猜测问题可能出现在哪里。如果猜不出来,那么就可以放弃了。其实原因并不是因为我们懒惰,而是因为我们所学的东西没有实际用途。一件好东西如果没有用,就像是屠龙宝刀,如果没有龙可以屠,那就只是废铁一块。显然很少有人再去写实模式下的程序了(更何况是汇编)。而我们急需要做的事情,又不是我们所学能解决得了的。

很多朋友很想学习内核编程。因为这听起来更酷。是真的。这很有趣,而且又可以好好的复习一下汇编语言,让废铁重新变成宝刀,那何乐而不为呢。内核编程和应用编程的区别在于,内核总是运行在复杂的条件下。一个应用程序只要在自己的进程空间内放心大胆的跑就行了。就算出一点问题,程序崩溃了,问题当然是在这个进程之中了。让我们瓮中捉鳖吧。内核则不同。内核的代码可能运行在系统中所有的进程和线程环境下。而且是同时的。内核模块之间互相调用,和硬件交互。等待中断,发出指令让CPU进行种种“热身”。当问题发生,操作系统将会崩溃。WinDbg将会向您展示真正的天书,记载着Windows在最后崩溃瞬间的状况。OK,我们不是MS的程序员,不可能看到秒钟在停止前指向某一行C语言代码。唯一值得庆幸的是:它们曾今是C语言代码,只是经过编译了。

学习了wowowock多年的调试经验,我和他合写了那本在网上流传的《天书夜读》。我个人感觉汇编在应用程序的编程中作用不大。因为应用编程环境相对简单,而且代码规模宏大得多。而内核往往是小巧而精致的。期望只懂C语言就搞定自己编写的内核模块中的BUG显得不太现实。当然我不排除有这样的可能。但是当我们宝刀在手,Windows内核的天书直接向我们放开阅读时,还有什么能难得住我们的呢?我非常感谢博文视点的朋友,最终将《天书夜读:从汇编语言到Windows内核编程》正式出版。相信更多的程序员同行和爱好者,会因此打开全新视野的大门。

上述文字由《天书夜读:从汇编语言到Windows内核编程》作者  谭文  提供

本书购买地址:http://www.china-pub.com/209258

【书 名】天书夜读:从汇编语言到Windows内核编程
【作 者】 谭文,邵坚磊 著
【ISBN】 978-7-121-07339-7
【出版社】 电子工业出版社
【出版日期】2008年12月
【宣传语】
从貌似天书的汇编代码中,一探Windows底层的核心实现。
在开发中出现的问题,能从Windows自身找到答案!
【内 容 简 介】
本 书从基本的Windows程序与汇编指令出发,深入浅出地讲解了Windows内核的编程、调试、阅读,以及自行探索的方法。读者在使用C/C++开发 Windows程序的基础上,将熟练掌握汇编和C语言的应用,深入了解Windows底层,并掌握阅读Windows内核的基本方法,以及Windows 内核的基本编程方法。
本书适合使用C/C++在Windows上编程的读者,尤其适合希望加深自己技术功底的Windows应用程序员、计算机专业的有志于软件开发的大中院校学生;专业的Windows内核程序员,亦可从本书得到超越一般内核程序开发的启发。

走近汇编理解与内核编程相关推荐

  1. 深入理解Linux内核-第3版 译者序、前言、目录 内核2.6.11

    一.译者序 Linux是一个全新的世界,世界意味着博大精深,而新或许代表对旧的割舍和扬弃,加在一起,就是要我们在割舍和扬弃的同时还要积累知识到博大精深的地步,这容易做到吗?是的,这不容易做到.Gera ...

  2. Linux内核分析及内核编程

    倪继利著 2005年8月出版 ISBN 7-121-01518-5 900页 88.00元(估价) 倪  倪继利著 2005年8月出版 ISBN 7-121-01518-5 900页 88.00元(估 ...

  3. Linux设备驱动开发详解【三】_Linux 内核及内核编程

    本文简介 由于 Linux 驱动编程本质属于 Linux 内核编程,因此有必要掌握 Linux 内核及内核编程的基础知识.         3.1-3.2 节讲解 Linux 内核的演变及 Linux ...

  4. Windows内核编程实现拦截Xuetr程序

    Windows内核编程实现拦截Xuetr程序 ----TTL 寒假的时候,开始学习windows内核编程,想走近windows的内部世界.由于微软对于windows并不开源,所以有些人开始质疑:学习w ...

  5. 深入理解LINUX内核(影印版第3版)》的笔记

    书名: 深入理解LINUX内核(影印版第3版) 作者: Daniel P.Bovet/Marco Cesati 副标题: Understanding the Linux Kernel 页数: 923 ...

  6. 深入理解 Linux 内核

    Linux 内核系列文章 Linux 内核设计与实现 深入理解 Linux 内核 深入理解 Linux 内核(二) Linux 设备驱动程序 Linux设备驱动开发详解 文章目录 Linux 内核系列 ...

  7. 笔记:深入理解Linux内核(二)

    笔记:深入理解Linux内核(二) 二零二一年十月二十四日 文章目录 笔记:深入理解Linux内核(二) 第二章:内存寻址 内存地址 硬件中的分段 段选择符和段选择器 段描述符 快速访问段描述符 分段 ...

  8. 深入理解Linux内核-第3版 第二章 内存寻址 内核2.6.11 强调:本章出现参见其他章节的地方不做深究,留到看到对应章节时深究

    本章介绍寻址技术.值得庆幸的是,操作系统自身不必完全了解物理内存:如今的微处理器包含的硬件线路使内存管理既高效又健壮,所以编程错误就不会对该程序之外的内存产生非法访问. 作为本书的一部分,本章将详细描 ...

  9. Win64 驱动内核编程-8.内核里的其他常用

    内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...

  10. linux内核_Linux驱动编程的本质就是Linux内核编程

    由于Linux驱动编程的本质属于Linux内核编程,因此我们非常有必要熟悉Linux内核以及Linux内核的特点. 这篇文章将会帮助读者打下Linux驱动编程的基础知识. 本篇文章分为如下三个小节进行 ...

最新文章

  1. C#面向对象(四)虚方法实现多态
  2. 三个线程交替打印ABC(Condition实现精确通知)
  3. 一只快乐的野指针_野酸枣
  4. JAVAEE框架之Spring新注解
  5. 文件打开特别慢_“Origin进不去、下载慢”的解决办法合集
  6. mmdetection工程训练文件配置小结
  7. 京东取消快递员底薪引热议 官方回应:试点更有激励性的业务提成
  8. 南邮 md5 collision
  9. 怎样在Xcode 4下编译发布与提交App到AppStore?(转)
  10. 堆区和栈区的区别【转】
  11. 解决mac系统压缩文件.zip,在win解压后,出现乱码
  12. 数据同步问题与解决方案:增量全量、数据漂移,数据更新、
  13. matlab for局部变量赋值,Matlab中的persistent变量
  14. 抖音小店运营规则;;超详细小店违规处罚条例;丨国仁网络资讯
  15. 如何友好提示vue3.0不再支持IE11及以下的浏览器版本
  16. Win10安装软件弹出:当前无法访问>SmartScreen
  17. 元素和子集,属于与包含
  18. 服务器H330阵列卡不建议做Raid5
  19. java常用计算公式
  20. 修改ansible hosts文件路径

热门文章

  1. MS Sql当中 money类型数据使用 Decimal 传输
  2. jdbc:initialize-database标签的研究
  3. 1042. Shuffling Machine
  4. linux内核启动地址的确定
  5. (转)利用个人电脑搭建网站WEB服务器域名访问
  6. Ubuntu安装usb库
  7. 处理收到的Stanzas
  8. python3的包(package)在centos中的安装地址
  9. WebApp用组件方式开发全站
  10. velocity模板使用建议