操作系统真相还原 第一章 部署工作环境

本文详细介绍了在Ubuntu22.04系统中安装Bochs模拟器,包括依赖项安装、配置文件设置、创建启动磁盘、主引导记录编写和汇编代码应用,同时涵盖了内存结构的基础知识,如代码段、数据段、BSS段和栈堆的区别。
摘要由CSDN通过智能技术生成

环境vmware+ubuntu22.04.1

安装依赖

sudo apt install build-essential
sudo apt-get install libghc-x11-dev
sudo apt-get install xorg-dev

下载Bochs并解压到相应的目录下
Bochs-2.6.8
创建一个空目录

mkdir bochs

进入解压后的bochs-2.6.8文件夹

配置bochs的config文件,编译安装

sudo ./configure \
--prefix=/home/llh/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11
make
make install

这个时候在进入到你创建的bochs目录你会看到俩个文件夹一个bin和share表示安装成功

配置bochs

创建**bochsrc.disk**文件

# Bochs配置文件
 
# 机器内存: 32MB
megs: 32
 
# 启动方式
boot: disk
 
# 关闭鼠标,打开键盘
mouse: enabled=0
keyboard:keymap=/home/llh/bochs/share/bochs/keymaps/x11-pc-us.map
 
# BIOS VGA
romimage:file=/home/llh/bochs/share/bochs/BIOS-bochs-latest
 
# 如 romimage:file=/home/zzz/bochs/share/bochs/BIOS-bochs-latest
 
vgaromimage:file=/home/llh/bochs/share/bochs/VGABIOS-lgpl-latest
 
# 输出日志
log:bochsout.txt
 
# 硬盘设置 
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
# 这一行就是上一个步骤输出的
ata0-master: type=disk, path="hd60M.img", mode=flat
 

创建启动磁盘

bin/bximage

然后依次在输入框依次输以下

1

hd

flat

60

hd60M.img

编写主引导块记录

;主引导程序
SECTION MBR vstart=0x7c00
	mov ax,cs
	mov ds,ax
	mov es,ax
	mov ss,ax
	mov fs,ax
	mov sp,0x7c00
 
	mov ax,0x600
	mov bx,0x700
	mov cx,0
	int 0x10
 
	mov ah,3
	mov bh,0
	int 0x10
 
	mov ax,message
	mov bp,ax
	
	mov cx,5
	mov ax,0x1301
	
	mov bx,0x2
	int 0x10
	
	jmp $
	message db "hello"
	times 510-($-$$) db 0
	db 0x55,0xaa

编译汇编代码并写入hd60M.img硬盘

nasm -o mbr.bin mbr.s
dd if=/home/llh/bochs/mbr.bin of=/home/llh/bochs/hd60M.img bs=512 count=1 conv=notrunc

启动bochs

bin/bochs -f bochsrc.disk

关于内存结构的一些知识:
在这里插入图片描述
c/c++:

  • 代码段(text):就是C程序编译后的机器指令,也就是我们常见的汇编代码。

  • 数据段(data):用来存放显式初始化的全局变量或者静态(全局)变量,常量数据。

  • BSS段(Block Started by Symbol): 存储未初始化的全局变量或者静态(全局)变量。编译器给处理成0;

  • 栈段(stack):存放函数调用相关的参数、局部变量的值,以及在任务切换的上下文信息。栈区是由操作系统分配和管理的区域。

  • 堆段(heap): 动态内存分配的区域,也就是malloc申请的内存区,使用free()函数来释放内存,堆的申请释放工作由程序员控制,容易产生内存泄漏。

汇编:

  • 可读可写的数据区:.text
  • 只读代码区:.data
  • 可读可写且没有初始化的数据区:.bss
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值