当前位置: 首页 > article >正文

【OSlab】qemu和AbstractMachine的使用

开始

安装qemu-system (全系统模拟器)后
在这里插入图片描述
可以看到一个模拟器窗口
在这里插入图片描述
上面打印了很多字符串,那不是模拟器实现的,那是固件(firmware)实现的。

调试固件

wget -r -np -nH --cut-dirs=2 -R “index.html*” “https://jyywiki.cn/os-demos/introduction/debug-firmware/”
下载代码:
在这里插入图片描述
打开文件夹,里面有三个文件:
在这里插入图片描述
查看Makefile内容:
在这里插入图片描述
命令行make run,也会出现qemu窗口。与刚刚不同的是,这回找到设备了,并且执行一个死循环。(注意!从qemu取回鼠标的方法是【ctrl+左alt】

在这里插入图片描述
调试(p $eip),可看到它现在一直在执行0x7c00处代码:
在这里插入图片描述

在这里插入图片描述
此外,这里还有一个能使得gdb调试更方便的东西,叫init.gdb。可以看到,它可以:

  • 自动连接本机qemu进行调试
  • 设置好watch point、断点、layout asm
  • 在关闭gdb时,自动kill qemu(无需手动取回鼠标再点击叉号)

在这里插入图片描述
执行make debug,感受一键调试的方便
在这里插入图片描述
按一下回车,停在这里的原因就是0x7c00附近有改动,其实就是从磁盘上(image)搬了两个字节(EB FE)
在这里插入图片描述
c继续,又搬了两个字节(11 22)
在这里插入图片描述
c继续,又搬了两个字节(33 44),但这回没停,估计原因是只能探测四个字节范围的改动。它最终停在了断点。代表要执行0x7c00位置的代码了。如果继续c,那么可以看到这是个死循环。
在这里插入图片描述


http://www.kler.cn/news/367681.html

相关文章:

  • Java 项目 Dockerfile 示例:从基础镜像选择到环境变量配置的详细指南
  • 计算机网络:网络层 —— IPv4 地址的应用规划
  • 基于springboot+vue的高校就业管理系统,
  • 面向对象与设计模式第二节:设计模式实战
  • 从零学习大模型(五)-----提示学习(Prompt Engineering)
  • Maven项目报错:invalid LOC header (bad signature)
  • 504 Gateway Time-outopenresty
  • 【译】图数据库
  • JVM 加载 class 文件的原理机制
  • 在vue中 如何实现跨域
  • STM32实现毫秒级时间同步
  • 【解惑】如何用python输出“1024“
  • SQL CHECK 约束:确保数据完整性的关键
  • 【LeetCode】修炼之路-0008- String to Integer (atoi)【python】
  • 世优科技AI数字人180+面部控制参数,雕琢智能体精准表达
  • C++面向对象-继承,多态,重载
  • Pytest+Allure+飞书机器人
  • Video-XL:面向小时级视频理解的超长视觉语言模型
  • STL-常用容器-list
  • Go通过gorm连接sqlserver报错TLS Handshake failed
  • LSP的建立
  • flask服务通过gunicorn启动,supervised管理服务
  • Flutter仿京东商城APP实战 用户中心基础布局
  • Go中的指针指向指针(双指针)
  • git命令笔记(速查速查)
  • Node-Red二次开发:git下载本地打镜像docker部署