首页 > 代码库 > CSAPP:异常控制流
CSAPP:异常控制流
在一般的情况下,处理器处理的指令序列是相邻的(顺序执行)。
异常控制流提供了指令的跳转,它一部分是由硬件实现的,一部分是由操作系统实现的。
异常处理
在系统启动时,操作系统分配和初始化一张称为异常表的跳转表:
触发异常时将从跳转表中找到并执行相应的异常处理程序的代码(所谓的内核态代码?):
系统调用
每个系统调用都属于异常,当调用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:异常控制流
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。