zoukankan      html  css  js  c++  java
  • CSAPP:异常控制流

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

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

     

    异常处理

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

     

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

     

    系统调用

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

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

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

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

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

    相应的汇编代码

    main:
        movl $4, %eax       系统调用号
        movl $1, %ebx       文件描述符
        movl $string, %ecx "hello, world
    "
        movl $len, %edx     长度
        int $0x80
        ...
  • 相关阅读:
    acwing 116. 飞行员兄弟
    leetcode 1041. 困于环中的机器人
    acwing 110 防晒
    acwing 167. 木棒
    AcWing 166. 数独
    solr4.7新建core
    solr4.7新建core
    Solr4.7从文件创建索引
    Solr4.7从文件创建索引
    Solr4.7从文件创建索引
  • 原文地址:https://www.cnblogs.com/runnyu/p/5913624.html
Copyright © 2011-2022 走看看