约有 15 项符合查询结果, 以下是第 1 - 2项。
费时 < 1 秒。
书《保护方式下的80386及编程》中断和异常章节:344页,第10号异常——无效TSS中叙述作者:周明德
Posted in Windows内核调试
by
阿龙
on 2010-12-28
书上:异常10定义为无效TSS故障。任务切换期间,如果新任务的TSS是一个非法的任务状态段,变会产生无效TSS故障。当无效TSS故障发生时,转入故障处理程序,压入栈中的CS及EIP值指向引起这一故障的指令;而当该故障作为任务切换的一部分发生时,则指向任务切换的第一条指令。疑问是:TSS只有在任务切换过程中,才有可能出现TSS故障。为什么会说:而当该故障作为任务切换的一部分发生时,则指向任务切换的第一条指令。对这句话不是很明白。如果在任务切换过程中,发生了一个TSS故障,那么处理完了,就直接执行新任务的第一条指令了?如果有连续2个异常,岂不是后面的异常被忽略了?
Posted in Windows内核调试
by
阿龙
on 2010-12-27
我在看书的时候,有以下一段话:由于TSS存储在线性地址空间中,因而可以由分页机制对TSS重新进行定位,甚至可以把TSS换出到虚拟存储系统的磁盘中。要把TSS从内存换出,只有一个特别的要求,即任务切换中间不允许发生页异常。如TSS所在的页不在存储器中,则对此TSS的访问将产生页异常,TSS所在的页可从磁盘上读回内存。由于在任务切换操作期间,处理器只访问TSS的前104个字节,所以,采用一些简单的策略可以保证在任务切换中间不会发生页异常:一种策略是不要把TSS换到磁盘上,或者把段标记为不存在。另一种策略是,通过保证每个TSS段都不跨越页的边界,从而保证TSS被对换时,要么整个段存在,要么整个段不存在。事实上,这一点再设计的时可以很容易地实现。这只要把每个段对齐在线性地址空间的128字节边界即可。 ...
Posted in Windows内核调试
by
阿龙
on 2010-12-10
关于分页机制的一个疑惑:我在看杨季文《80x86汇编语言程序设计》,看到分页机制的时候,遇到了一个小小的疑惑:原书505页:在建立好页映射表后,启用分页机制所要做的操作是简单的,只要把控制寄存器中的最高位设置为1。具体指令如下:MOV EAX, CR0OR EAX, 80000000HMOV CR0, EAXJMP SHORT ...
Posted in Windows内核调试
by
阿龙
on 2010-11-16
最近学到了中断和异常处理,很多疑惑,下面2个问题尤其让我晕:在讲到异常中的陷阱的时候,书上说:当控制转移到异常处理程序的时候,所保存的断点CS及EIP的值指向引起陷阱的指令的下一条要执行的指令。下一条要执行的指令,不一定就是下一条指令。因此,陷阱处理程序并不总是能根据保存的断点,反推出产生异常的指令。其中:下一条要执行的指令,不一定就是下一条指令,我不太明白,能举个例子吗?在列举故障类异常:段不存在故障的时候,书上说:在进入故障处理程序时,保存的CS及EIP指向发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令。对于:作为任务切换的一部分发生时,指向任务的第一条指令,我也想不太明白,能举个例子吗?谢谢!!
Posted in Windows内核调试
by
阿龙
on 2010-11-11
只谈代码段:网上有关于CPL, DPL, RPL的很多解释,但我还是有一些疑惑:1. RPL的调整是CPU进行的?还是操作系统?还是程序员?2. CPL到底保存在哪里?CS寄存器(物理角度)的[1:0]位?3. 和2相关的问题就是,RPL到底保存在哪里?在代码中,选择子一般是个常量,包含了索引值及TI位,但并没有指定RPL,在转移的时候,类似于这样的指令,jmp selector:offset,那么RPL在哪里呢?是不是有一块大小和选择子一样的内存被分配,然后填入索引,TI位,并且写入RPL,然后才执行验证?4. 我在看杨继文的书时,里面对于向目标代码段转移的步骤有如下的描述: a. 判断是否为空描述符 b. ...
Posted in Windows内核调试
by
阿龙
on 2010-10-27
看了下Intel手册,有些东西大概明白了,但是又碰到一个新的问题。
问题的来源是:我们在实模式下,要使用jmp指令跳转到保护模式下,一般的书上说的都是16位的偏移,也就是说跳过去的不管是32位还是16位的代码段,偏移不能超过0xffff,如果我希望超过0x10000呢?我自然就想到了段前缀 66h和67h,
疑问1:这2个段前缀可以使用在jmp指令上吗?
不能就不说了,如果能,那么我应该使用66h在jmp之前,用来逆转操作数大小为32位,但是新的问题是,66h,0ea,offset,segment这条指令中,offset会被这条前缀所影响而读入一个32位的偏移吗?segment呢?
谢谢!
Posted in Windows内核调试
by
阿龙
on 2010-10-22
接上面的,MASM有一个段属性 USE16 和 USE32,用来定义段是16位段还是32位段,而段描述符中也有用于描述16/32的位,这两个应该保持一致吗?有什么交叉的影响啊?
Posted in CPU架构
by
阿龙
on 2010-10-21
在学习保护模式的路上,又遇到了几个疑惑,忘各位前辈指教:)
首先是关于16位段和32位段,之间的区别到底有哪些?就我所知道的,16位段上限为0xffff,而32位段是0xffffffff,默认情况下,16位段的地址偏移为16位,立即数默认为16位或8位,而32位段的地址偏移为32位,立即数默认为32位和8位。只有这些区别吗?
在看保护模式和实模式切换的代码时,我遇到了几个问题:
1。从实模式切换到32位保护模式代码段时:使用了JUMP16,一个16位段值/段选择子+16位偏移的跳转指令,我的疑惑是此时CPU已经处于保护模式下,那么跳转指令中的偏移大小应该根据目标段描述符中的属性来确实,此时目标段是32位,描述符中也定义为32位,那么跳转指令应该期望的是48位的全指针,此处的JUMP16 ...
Posted in CPU架构
by
阿龙
on 2010-10-21