概述
代码:
00050: EBX = 0x00
00051: ECX = 0x04
00052: EDX = 0x08
00053: ESI = 0x0C
00054: EDI = 0x10
00055: EBP = 0x14
00056: EAX = 0x18
00057: DS = 0x1C
00058: ES = 0x20
00059: ORIG_EAX = 0x24
00060: EIP = 0x28
00061: CS = 0x2C
00062: EFLAGS = 0x30
00063: OLDESP = 0x34
00064: OLDSS = 0x38
00051: ECX = 0x04
00052: EDX = 0x08
00053: ESI = 0x0C
00054: EDI = 0x10
00055: EBP = 0x14
00056: EAX = 0x18
00057: DS = 0x1C
00058: ES = 0x20
00059: ORIG_EAX = 0x24
00060: EIP = 0x28
00061: CS = 0x2C
00062: EFLAGS = 0x30
00063: OLDESP = 0x34
00064: OLDSS = 0x38
当中断发生时,CPU将寄存器的EFLAGS的内容,以及代表返回地址的CS和EIP两个寄存器的内容压入堆栈。如果CPU的运行级别发生变化,则在此之前还要发生堆栈的切换,并且要把代表老堆栈指针的SS和ESP的内容压入堆栈。
以上这些都是CPU自动完成的动作,之后内核代码会将(中断号-256)压入系统堆栈,紧接着调用SAVE_ALL将中断发生时ES、DS、EAX、EBP、EDI、ESI、EDX、ECX和EBX寄存器中的值依次压入系统堆栈。完成这些操作之后的系统堆栈如下图所示:
附件:
SystemStack.JPG [ 28.73 KiB | 被浏览 453 次 ]
从图中你不难发现实际上这些宏定义的值就是各个寄存器的内容在系统堆栈中相对栈顶指针的偏移量。
上面这个图是针对中断的,对于异常ORIG_EAX偏移处存放的是错误码(如果有的话),而对于系统调用则是存放着系统调用号。
最后
以上就是隐形钥匙为你收集整理的ORIG_EAX的全部内容,希望文章能够帮你解决ORIG_EAX所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复