bochs

《操作系统真象还原》MBR

邮差的信 提交于 2021-02-12 05:21:53
  以下是读本书第三章的收获。   如何知道一个源程序的各符号(指令和变量)地址?简单来说,地址就是该符号偏移文件开头的距离,符号的地址是按顺序编排的,所以两个相邻的符号,其地址也是相邻的。对于指令来说,指令的地址=上一个指令的地址+上一个指令的大小,最初的符号地址为0,可以根据此公式推算出所有符号的地址。 section称为节,它是提供给程序员编排程序用的,我们可以将一段读取字符串的代码放在section A下,将读取硬盘的代码放进section B下,可以给A,B换成一个更具体的名字,来提高可读性。 例如,下图这段代码,将整个程序分成section code和section data两节,顾名思义,就是存放代码和数据的两个section,这样我们就很清楚地知道每部分代码是做什么用的。另一个值得注意的细节是section并不会对符号的编址用什么影响,去掉section和不去掉其实符号的地址都是一样的。 vstart用于告诉编译器,之后的符号都以某个地址为初始地址来编址。如下图,像$$的地址替换成以0x7c00为初始地址的地址,符号var1和var2的地址被替换成以0x900的地址。 当然,我们还可以通过section.节名称.start来获得在文件中真正的地址。如section.code.start值为0x0,即section code偏移文件的距离为0

《操作系统真象还原》BIOS

拜拜、爱过 提交于 2021-02-12 04:56:49
  以下是读本书第二章的收获。   记得我大学学习操作系统的时候会遇到一些奇奇怪怪的问题,因为觉得问题太奇怪了,所以羞于问老师。诸如 ROM到底是个什么东西 ;如果用 内存映射的方式访问外部设备,是不是内存条里专门有块内存空间来用于访问供外部设备 ,是不是先访问内存条这个地址,然后就直接跳到访问这个设备了等等。幸运的是,这本书都给我一一解答了。   实际上,ROM是下图这样的一种只读存储器(取自百度百科),是一种即使没有通电,也能保存信息的存储器。ROM其实是既可以读也可以写,只不过由于历史原因统称只读存储器。ROM种类不少,我们常用的固态硬盘就是基于闪存(一种ROM)的存储器。   我们下面将要说的BIOS正是存储在ROM设备中的程序,为什么BIOS放在ROM上?个人觉得,BIOS每次通电开机时都要运行,所以是不适合RAM这种断电即丢失信息的存储器了;至于磁盘也不太适合了,我们知道CPU能够直接访问的只有寄存器和内存,不包括磁盘这种外围设备。所以要执行在磁盘中程序的话,首先要将代码加载到内存里,再让CPU从内存取指令出来执行,但因为此时还未执行BIOS程序,换句话说,我们还没有对硬件IO操作的功能,所以将代码从磁盘里加载出来的功能还不能使用。这样的话,磁盘程序放不出BIOS,BIOS也执行不了初始化操作,将BIOS放在硬盘估计就是让BIOS和硬盘俩对着对方干瞪眼,所以硬盘并不适合

Assembly - Problems running a bootloader in bochs

∥☆過路亽.° 提交于 2021-01-27 20:22:37
问题 I am currently trying to compile and run a simple bootloader in bochs. Currently, this is my bootloader.asm file: [BITS 16] [ORG 0x7C00] ;Where the code gets mapped top: jmp top ;Loop forever times 510-($-$$) db 0 ;Pad with 0 dw 0xAA55 ;Bootloader signature (backwards) ;; dw declares a word (2 bytes because we’re 16 bits) From my pragmalinux-img directory I then type in the following commands: yasm bootloader.asm dd if=bootloader bs=512 bochs Upon running bochs I get the following error

oslab oranges 一个操作系统的实现 实验一

十年热恋 提交于 2020-12-06 18:48:50
实验目的: 搭建基本实验环境,熟悉基本开发与调试工具 对应章节:第一、二章 实验内容: 1.认真阅读章节资料 2. 在实验机上安装 virtualbox,并安装ubuntu 3. 安装 ubuntu开发环境,32位环境 4. 下载 bochs源码,编译并安装bochs环境 5. 使用 bochs自带工具bximage创建虚拟软驱 6. 阅读、编译 boot.asm,并反汇编阅读 7. 修改 bochsrc,运行并调试你的第一个程序: 删除 AA55,观察程序效果,找出原因 修改程序中输出为,一个任意长度的打印字符串,调试程序 把生成的可执行文件反汇编,并设置断点进行调试,打印过程 回答:为什么要对段寄存器进行赋值 回答:如何在该程序中调用系统中断 实验环境: VMwareWorkstationPro 15.5.0 Ubuntu 12.04.5 desktop i386 32位 bochs 2.6.9 关键技术: Bochs的使用,主要在于反汇编与单步调试 汇编代码的理解 Makefile的使用 实验步骤: 1. 在实验机上安装 virtualbox,并安装ubuntu开发环境,32位环境 在官网下载VMware Workstation Pro 15.5.0并安装 在http://mirrors.163.com/ubuntu-releases/, 下载: 32位Ubuntu,12

直接在x86硬件上显示图片(无os)

纵饮孤独 提交于 2020-10-25 20:40:14
1 任务   为了学习计算机底层和os,我给自己布置了一个任务:在x86硬件上,使用c和nasm来显示一张bmp图片。完成这个任务,前后估计花了2个月的业余时间。   这个任务涉及了很多知识点,包括:启动区、保护模式、nasm汇编、c和nasm汇编互调、ld链接、硬盘io读取、显卡调色板模式、bmp图片格式、bios中断指令、c指针操作内存、borch虚拟机、binutils工具集、makefile等。 2 环境 ubuntu borchs nasm和 c PS: c代码遵循google的C++ 风格指南,使用gnu99标准 。 3步骤 3.1 生成一个10M的硬盘镜像   bximage是borchs软件包的一个小工具,可以用于生成硬盘或软盘镜像。打开终端,输入:bximage。按照如下图所示的,一步一步地操作。 最终会在当前目录下,生成一个名为10M.img的文件。 3.2 准备一张320*200的bmp图片   为简单起见,屏幕的分辨率使用320*200。因此我们的bmp图片的大小320*200。我准备了一张图片,如下,这是我家主子的靓照。   将文件命名为cat-666.bmp,然后写入到#201扇区 dd if =src/cat-ham.bmp of=10M.img bs=512 seek=201 conv=notrunc 3.3 引导区   引导区位于启动盘的#0扇区

直接在x86硬件上显示图片(无os)

对着背影说爱祢 提交于 2020-07-28 08:25:09
1 任务   为了学习计算机底层和os,我给自己布置了一个任务:在x86硬件上,使用c和nasm来显示一张bmp图片。完成这个任务,前后估计花了2个月的业余时间。   这个任务涉及了很多知识点,包括:启动区、保护模式、nasm汇编、c和nasm汇编互调、ld链接、硬盘io读取、显卡调色板模式、bmp图片格式、bios中断指令、c指针操作内存、borch虚拟机、binutils工具集、makefile等。 2 环境 ubuntu borchs nasm和 c PS: c代码遵循google的C++ 风格指南,使用gnu99标准 。 3步骤 3.1 生成一个10M的硬盘镜像   bximage是borchs软件包的一个小工具,可以用于生成硬盘或软盘镜像。打开终端,输入:bximage。按照如下图所示的,一步一步地操作。 最终会在当前目录下,生成一个名为10M.img的文件。 3.2 准备一张320*200的bmp图片   为简单起见,屏幕的分辨率使用320*200。因此我们的bmp图片的大小320*200。我准备了一张图片,如下,这是我家主子的靓照。   将文件命名为cat-666.bmp,然后写入到#201扇区 dd if =src/cat-ham.bmp of=10M.img bs=512 seek=201 conv=notrunc 3.3 引导区   引导区位于启动盘的#0扇区

通过9个Linux-0.11实验学习操作系统

微笑、不失礼 提交于 2020-04-28 03:28:28
<font size="3"> ## 简介 2019年秋,我自学了一下哈工大的操作系统课程,感觉其设计的教程和实验作为操作系统入门是个不错的选择(虽然是基于较老的Linux-0.11写的)。实验大致覆盖了操作系统中的核心概念,例如启动、中断、外设IO、上下文切换/系统调用,进程管理与调度,进程间通信,内存管理/地址转换,文件系统等。而且每个实验在教材中都有对应的说明,做起来很顺畅。我做完后整理了一下相关资源,希望能帮到一些自学的同学。 <br /> 指导教材 该课程使用的教材是 李治军 和 刘宏伟 编著的《操作系统原理、实现与实践》(ISBN: 978-7-04-049245-3),你可以在 这里 获得。除了和课程对应的实验,这本书还在最后设计了4个大的项目,包含内核级线程,虚拟内存,GUI以及网络协议的实现。 另外,赵炯 编著的《Linux内核完全注释-内核版本0.11》也是一本不错的参考书,你可以在 这里 获取。 <br /> 实验资源 你可以在 Hack-Linux-0.11 上获得开发环境需要的工具,以及每个实验的参考代码、示例效果和注意事项。该仓库的布局说明如下: oslab.zip:原Linux 0.11的代码和在GNU/Linux下开发所需的工具,例如Bochs 2.3.7和GCC 3.4。 tmp/: 一些杂项,和主体实验没什么关系。 Lab 6.Ext.

调试环境的搭建

时光总嘲笑我的痴心妄想 提交于 2020-03-09 14:32:11
在Hello DTOS中,使用汇编语言直接基于x86架构的硬件完成了第一个主引导程序,实在是大功一件。 Hello DTOS博客中,存在着这样一个问题:在开发的过程中没有任何可用的调试环境,当主引导程序越来越复杂时,出现bug根本没法调试。 本篇博客就来搭建高效可用的调试环境 调试环境搭建(上) 问题:如何调试主引导区的代码? Bochs(另一款优秀的虚拟机软件) -专业模拟x86架构的虚拟机 -开源且高度可移植,由C++编写完成 -支持操作系统开发过程中的中断调试 -通过简单配置就能运行绝大数主流的操作系统 支持调试功能的Bochs版本 1. 下载源码:https://sourceforge.net/projects/bochs/files/ 2. 解压缩bochs-2.x.x.tar.gz->bochs-2.x.x 3. 进入源码目录:cd bochs-2.x.x 4. ./configure --enable-debugger --enable-disasm 5. make 6. sudo make install 安装完成bochs后,直接运行bochs,会出现崩溃,为什么? 调试环境搭建(中) -确定bochs的安装路径(which bochs) -安装vgabios(apt-get install vgabios) -确定vgabios的安装路径(whereis

调试环境搭建

蹲街弑〆低调 提交于 2020-03-09 14:26:28
操作系统相关的代码,始终还是代码,即肯定需要相应的调试工具。 Bochs是一种十分轻便的使用c++编写的开源IA-32(x86)电脑模拟器,可以运行在最受欢迎的平台上。能仿真英特尔x86 CPU、常见的I/O设备、和定制的BIOS, 支持断点调试,调试方法和GDB非常相似。 现在官网下载Bochs的源码: 然后将其拷贝到ubuntu下:解压缩: tar -zxvf bochs-2.4.5.tar.gz 然后执行: ./configure --enable-debugger --enable-disasm 此时可能会报错 : ERROR: X windows gui was selected, but X windows libraries were not found. 解决办法: sudo apt install xorg-dev但是此时可能又会出现这样的情况: 0% [Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)] 解决办法: 先执行: sudo nano /etc/gai.conf 然后找到这行命令: #precedence ::ffff:0:0/96 100 把“#“去掉,保存退出即可。 再次执行 sudo apt install xorg-dev 即可安装成功。 然后,再运行: ./configure

Ubuntu 12.10安装Bochs 2.6, 调试linux-0.11内核

主宰稳场 提交于 2020-03-01 11:56:20
http://blog.csdn.net/sinzou1/article/details/5903968 Linux(ubuntu)安装bochs http://wenku.baidu.com/view/f968e23b0912a21614792914.html ubuntu下安装bochs http://www.linuxidc.com/Linux/2011-07/38371.html Ubuntu 10.04安装Bochs 2.4.5笔记 http://blog.csdn.net/traceless/article/details/3200169 bochs的安装与使用 http://hi.baidu.com/_0x55aa/item/38e3ac01d72f0e1bcc34eae6 linux bochs的启动 本文介绍在SUSE Linux Enterprise Desktop系统下如何使用bochs调试内核linux-0.11版本 前言: linux-0.11虽然是早期内核代码,代码不超过2万行,但却基本是现今内核代码的精简版本,麻雀虽小,五脏俱全. 阅读理解完整代码,可以对整个系统的运作过程有深刻理解. 一. 准备工作(以root用户执行): 下载调试工具bochs: 在 http://sourceforge.net/projects/bochs/ 下载.tar