日期:2014-05-16 浏览次数:20802 次
Linux把整个的虚拟存贮空间自上而下分为系统空间,堆栈空间,数据段和代码段。当系统访问页面异常时,cpu将失败的线性地址保存在CR2中。同时还会传来两个参数pt_regs和error_code。前者保存了异常发生前夕各寄存器的一个副本。
?
struct pt_regs {
	long ebx;
	long ecx;
	long edx;
	long esi;
	long edi;
	long ebp;
	long eax;
	int  xds;
	int  xes;
	long orig_eax;
	long eip;
	int  xcs;
	long eflags;
	long esp;
	int  xss;
};
?各寄存器的含义如下:
eax,ebx,ecx,edx----数据寄存器,其中eax是累加器;
esi,edi---变址和指针寄存器;
esp,ebp----指针寄存器;
eip---- 指令指针寄存器;
eflags----标志寄存器;
xcs,xds,xes,xss---段寄存器,code,data,stack,specail。
orig_eax 有特殊的用途,我们将在以后的文章中进行讨论。
?
Note:
80386有如下寄存器:
?
?