码迷,mamicode.com
首页 > 移动开发 > 详细

CSAPP:异常控制流

时间:2016-09-27 18:04:40      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

在一般的情况下,处理器处理的指令序列是相邻的(顺序执行)。

异常控制流提供了指令的跳转,它一部分是由硬件实现的,一部分是由操作系统实现的。

 技术分享

 

异常处理

在系统启动时,操作系统分配和初始化一张称为异常表的跳转表:

 技术分享

 

触发异常时将从跳转表中找到并执行相应的异常处理程序的代码(所谓的内核态代码?):

 技术分享

 

 

系统调用

每个系统调用都属于异常,当调用C库中的系统调用函数时将触发异常。

IA32系统中,系统调用是通过一条称为int 0x80(异常号)的陷阱指令来提供的。

所有Linux的系统调用都是通过寄存器来传递的。

下面是一个系统调用的例子

int main()
{
    write(1, "hello, world\n", 13);
    exit(0);      
}

相应的汇编代码

main:
    movl $4, %eax       系统调用号
    movl $1, %ebx       文件描述符
    movl $string, %ecx "hello, world\n"
    movl $len, %edx     长度
    int $0x80
    ...

CSAPP:异常控制流

标签:

原文地址:http://www.cnblogs.com/runnyu/p/5913624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!