阅读:1400回复:2
zhaock请快定义你的第一个情景
zhaock请快定义你的第一个情景,从2k或nt哪个文件开始,好让大家有所准备!!! :)
|
|
|
沙发#
发布于:2005-05-19 12:22
辛苦了。。hoho。。
等待你们的果实中。。。。。。。 |
|
板凳#
发布于:2005-05-20 20:13
呵呵,催得紧呀
第一个情景提纲(基于intel 32,基于win 2k的代码,2k没有的参考一下nt4的代码,) 1.先从硬件中断的处理讲起假设大家知道386保护模式编程的基本概念,idt,gdt等等不再赘述,可以查看相关资料 对应硬件中断的idt的表项是调用什么函数安装的 这就先要讲述一下InterruptObject的结构,和KeInitializeInterrupt这个函数 typedef struct _KINTERRUPT { CSHORT Type; CSHORT Size; LIST_ENTRY InterruptListEntry; PKSERVICE_ROUTINE ServiceRoutine; PVOID ServiceContext; KSPIN_LOCK SpinLock; ULONG Spare1; PKSPIN_LOCK ActualLock; PKINTERRUPT_ROUTINE DispatchAddress; ULONG Vector; KIRQL Irql; KIRQL SynchronizeIrql; BOOLEAN FloatingSave; BOOLEAN Connected; CCHAR Number; BOOLEAN ShareVector; KINTERRUPT_MODE Mode; ULONG ServiceCount; ULONG Spare3; ULONG DispatchCode[DISPATCH_LENGTH]; } KINTERRUPT; DispatchCode是真正的硬件中断通过idt执行的代码, 是从KiInterruptTemplate Copy到DispatchCode的,(在有些情况下可能是InterruptObject->DispatchAddress,需要进一步分析代码) 汇编代码KiInterruptTemplate在ke\\i386\\intsup.asm中 在KeConnectInterrupt中(ke\\i386\\intobj.c)中真正的将DispatchCode(或者可能DispatchAddress)的地址设置到Idt中 一般流程是DispatchCode call DispatchAddress,DispachAddress调用ServiceRoutine,是驱动程序提供的真正中断处理函数 详细描述一个中断产生后,完整的处理流程,会给出Trap的详细结构, 讲述一下idt,irql,vector的关系,x86的中断处理,有pic,和apic两种硬件支持, inside 2k里说单cpu 是pic,多cpu用apic, 但用ice看hal的代码,里面涉及到tpl,因为tpl是apic的概念,所以我现在尚没有搞清楚我们现在的P IV单cpu到底是pic,还是apic, 需要查阅一下相关的硬件资料,同时好好反汇编一下相关代码,同时参看nt4的hal部分, 代码代码在ntos\\nthals目录下 接下来会重点分析一下时钟中断的流程,也会涉及到DPC,APC,就会分析DPC,APC相关的结构,代码, 2.接下来讲一下KeSystemService的流程,在ke\\i386\\trap.asm中,和硬件中断的流程,做个比较, 3.然后讲一下int 0e这类异常的处理,和上两种情况做个对比,会涉及到exception的流程 大致按照这个顺序展开开始写 |
|