_KTRAP_FRAME

函数从3环到0环时的保存现场
操作系统维护了一个结构 _KTRAP_FRAME ,在该结构里保存了一个线程3环的寄存器的值。每一个线程有一个该结构体

Trap Frame是指中断、自陷、异常进入内核后,在堆栈上形成的一种数据结构。用来存储三环的寄存器。

typedef struct _KTRAP_FRAME //Trap现场帧

{

  // ------------------这些是KiSystemService保存的---------------------------

    ULONG DbgEbp;

    ULONG DbgEip;

    ULONG DbgArgMark;

    ULONG DbgArgPointer;

    ULONG TempSegCs;

    ULONG TempEsp;

    ULONG Dr0;	//调试寄存器

    ULONG Dr1;

    ULONG Dr2;

    ULONG Dr3;

    ULONG Dr6;

    ULONG Dr7;

    ULONG SegGs;

    ULONG SegEs;

    ULONG SegDs;

    ULONG Edx;//xy 这个位置不是用来保存edx的,而是用来保存上个Trap帧,因为Trap帧是可以嵌套的

    ULONG Ecx; //中断和异常引起的自陷要保存eax,系统调用则不需保存ecx

    ULONG Eax;//中断和异常引起的自陷要保存eax,系统调用则不需保存eax

    ULONG PreviousPreviousMode;

    struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList;//上次seh链表的开头地址

    ULONG SegFs;

    ULONG Edi;

    ULONG Esi;

    ULONG Ebx;

	ULONG Ebp;

//----------------------------------------------------------------------------------------

ULONG ErrCode;//发生的不是中断,而是异常时,cpu还会自动在栈中压入对应的具体异常码在这儿

//-----------下面5个寄存器是由int 2e内部本身保存的或KiFastCallEntry模拟保存的现场---------

    ULONG Eip;

    ULONG SegCs;

    ULONG EFlags;

    ULONG HardwareEsp;

	ULONG HardwareSegSs;

//---------------以下用于用于保存V86模式的4个寄存器也是cpu自动压入的-------------------

    ULONG V86Es;

    ULONG V86Ds;

    ULONG V86Fs;

	ULONG V86Gs;

} KTRAP_FRAME, *PKTRAP_FRAME;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值