总目录
1. WinDbg概述
2. WinDbg主要功能
3. WinDbg程序调试示例
4. CPU寄存器及指令系统
5. CPU保护模式概述
6. 汇编语言不等于CPU指令
7. 用WinDbg观察托管程序架构
8. Windows PE/COFF文件格式简述
9. 让WinDbg自动打开DotNet Runtime源程序
10. WinDbg综合实战
前言
通过前面三篇文章的学习,同学们应该对使用WinDbg调试C#程序有了基本的了解。
不过,在我的写作过程中,有一种感觉开始变得越来越强烈:如果想说清楚如何使用WinDbg,必须先介绍清楚CPU的基础知识,因为只有了解了CPU,才能懂得寄存器、指令系统和汇编。
因此,我打算从本篇开始,介绍一下Intel CPU基础知识。
CPU知识
Intel公司公布了其CPU系列的标准手册,最有用的就是《Intel® 64 and IA-32 Architectures
Software Developer’s Manual》,这里给的链接是4册合集(以下简称Intel手册),总计有5057页,而且只有英文。
啃完这么大部头手册虽并非不可能,但起码性价比不高。不过呢,这套手册实在写得太好了,其语言简直可以与最优秀的教科书相媲美,用词及语法都相当严谨,凡事都说得由浅入深,有条有理。下载一套手册备用,需要时随手翻翻,要比到网上胡乱找文章看有价值得多。
关键点还在于,对CPU需要了解到什么程度?我的建议是:浅尝辄止!如果非要给一个具体指标,从小白开始,学20小时足够了。不过呢,我还没有找到一套广度和深度都刚刚好的教材或教学视频。一般的汇编语言书籍对CPU的介绍太浅层次了,又对汇编指令介绍得太多了。而一般计算机体系结构方面的书呢又太细节了,初学者根本无法将知识点串起来。索性我就斗胆先把如何学习CPU知识啰嗦一下吧。
CPU寄存器与CPU工作模式
了解CPU的关键在于了解CPU的内部寄存器。
CPU访问内部寄存器的速度要比CPU访问内存条的速度快很多,大致你可以认为CPU读写一次寄存器的时间只有读写一次内存时间的几万分之一。
在Intel手册中,Intel把其各种寄存器的集合称为执行环境(Execution Environment),这种称谓其实是更科学严谨的,因为一条指令的执行通常和不同寄存器的当前状态息息相关,最简单的就是条件转移指令,该指令执行时,可能会发生跳转也可能不会跳转,在高级语言环境,我们是使用if语句,通过if后面的表达式结果到底是true还是false来判断的,而实际在CPU层面,是条件转移指令是否跳转完全是由指令执行时FLAG寄存器的值来决定的,因此Flag寄存器就是条件转移指令的执行环境因素之一。
同一个CPU,其实可以通过程序来修改其寄存器的数据,而有些寄存器又是控制CPU工作状态的。比如当前的CPU已经都是64位硬件结构了,但通过修改其不同控制寄存器的组合,可以使CPU工作于保护模式、IA-32e模式、实地址模式或系统管理模式(SMM)。IA-32e模式又可细分位IA-32兼容模式和64位模式;而不同的模式下,程序可以使用的寄存器也是不同的。举个最简单的例子:通过指令使CPU中CR0控制寄存器的PG位置0,会引发CPU从64位模式切换到IA-32模式(实际切换要比这复杂得多,但我们没必要了解更多细节)。一旦切换成功,以前64位模式下

最低0.47元/天 解锁文章
3749

被折叠的 条评论
为什么被折叠?



