现在的位置: 首页 >> 操作系统 >> FreeBSD >> FreeBSD 5内核源代码分析之copyin()实现原理
添加时间:2005-8-21 来源:网教中国 作者:
FreeBSD 5内核源代码分析之copyin()实现原理


对于copyin()产生的错误,"general protection fault"或"stack fault"
或"segment not present fault",都由这段代码处理。
由于在进入copyin()时设置了curpcb->pcb_onfault,这里将异常处理程序退出时
继续运行的eip指针设置为copyin_fault,于是,当异常返回后,程序控制将到达
copyin_fault。

代码:

ALIGN_TEXT
copyin_fault:
popl %edi
popl %esi
movl PCPU(CURPCB),%edx
movl $0,PCB_ONFAULT(%edx)
movl $EFAULT,%eax
ret

在这里,恢复寄存器,清除curpcb->pcb_onfault,返回EFAULT.

注意,此时的核心栈与拷贝成功时的核心栈是相同的,这是因为前述trap()函数
修改%eip后,程序只是将本来应该继续执行拷贝错误语句改为执行copyin_fault,
异常处理程序返回后的核心栈并没有变化。因此,内核将顺着copyin()后的代码执行,
就好象根本没有发生过异常一样。

参考文献:
[1] Sinan "noir" Eren, "Smashing The Kernel Stack For Fun And Profit", phrack60-06

上一页 [1] [2


上一篇:Unicode与ISO10646(上) 下一篇:FreeBSD 5内核源代码分析之系统调用过程
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·FreeBSD handbook中文版 9 配制F
·FreeBSD 升级系统
·Ports & Package
·FreeBSD kernel 编译大法(二)ker
·FreeBSD 上使用Kerberos 5认证
·FreeBSD 5.x 中 gbfs 的修正,及
·FreeBSD 安装Linuxigd
·FreeBSD 使用cvsd创建安全的cvs
·FreeBSD trafcount命令介绍
·FreeBSD入门安装及汉化
相关文章
·FreeBSD 5内核源代码分析之系统
最新文章
·FreeBSD连载(94):基于NAT的负载
·FreeBSD连载(93):反向代理负载
·FreeBSD连载(92):基于DNS的负载
·FreeBSD连载(91):提升静态网页
·FreeBSD连载(90):单服务器性能
·FreeBSD连载(89):CGI和SSI的安
·FreeBSD连载(88):安全连接方式S
·FreeBSD连载(87):基于用户的访
·FreeBSD连载(86):对IP地址和域
·FreeBSD连载(85):配置Apache服(
Google