zoukankan      html  css  js  c++  java
  • sti指令导致奇怪问题

    由于要在打印字符函数前后加上cli和sti关闭/打开中断以保证打印不会错乱。结果发现执行完sti指令以后后面一个正常的mov指令都直接报错,通过打开bochs的show dbg-all参数执行debug,结果显示如下:

     通过上面来看是由于GP异常导致执行0008:c0001515这条指令报错。GP异常有可能是很多情况导致,查看GP异常手册:

    链接:https://wiki.osdev.org/Exceptions#General_Protection_Fault

    由于bochs后面打印除了error code=0x0042,所以肯定是文档里说的segment related异常:

     

    把0x0042和这个格式对一下,结果发现是由于在idt里找不到中断导致的GP异常。

    然后检查代码,发现在执行sti命令时idt还没有初始化,所以可能是在执行到0008:c0001515这条指令时中断过来了,然后在idt里没有找到合法的对应的入口就报了GP异常。所以问题不是0008:c0001515这条指令的问题。

    问题代码:

    解决方法是给这三条打印指令删除(sti就是打印方法里的),或者放到中断初始化之后。

  • 相关阅读:
    软测试-计算机组成原理、系统和网络安全机构
    POJ 2044 Weather Forecast
    Cocos2d-x 3.x 头像选择,本地相册图片+图片编辑(Android、IOS双平台)
    Spring-----1、Spring一个简短的引论
    捕android程序崩溃日志
    java 正则表达式例子, 查找字符串
    java中Pattern.compile函数的相关解释
    java JdbcTemplate源码
    eclipse 常用快捷键整理
    java 正则表达式去除标点符号
  • 原文地址:https://www.cnblogs.com/caiyao/p/14237810.html
Copyright © 2011-2022 走看看