操作系统真象还原: 从0开始自制操作系统 全过程记录
获取源码:Tiny-OS
1. 部署工作环境,安装并配置bochs
我的系统为ubuntu22.04
1.1. 安装bochs
在这里下载好bochs的源码包,我使用的版本是boch-2.7
构建安装
./configure \
--prefix=/home/elite-zx/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \ --enable-x86-debugger \
--with-x \
--with-x11
make -j $(nproc) && make install
安装汇编器NASM
sudo apt update && sudo apt -y install nasm
1.2. 配置bochs
根据书在bochsrc.disk中写入以下内容
# bochs configuration file
# bochsrc.disk
# memory size: 32MB
megs: 32
# B ...
Stanford CS144 Spring 2023: 手搓TCP
1. lab0 networking warmup
1.1. Set up GNU/Linux on your computer
ubuntu22.04LTS下执行
sudo apt update && sudo apt install git cmake gdb build-essential clang \
clang-tidy clang-format gcc-doc pkg-config glibc-doc tcpdump tshark
安装g++12.3.0
sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
sudo apt update
sudo apt install g++-12 -y
将minnow仓库上传到自己的仓库,参考这个方法
如果你做的是2023年之前的版本,需要用到sponge仓库,那么我这里有一份未被修改过的版本
1.2. Networking by hand
1.2.1. Fetch a Web page
先提前准备好这3行首部信息,连接成功后快速复制进去,避免连接断开(Co ...
计算机网络自顶向下: Socket Programming Assignment + Miscellaneous Labs
Programming Tasks Of Computer-Networking-A-TopDown-Approach
WebServer
UDPPing
SMTP-Client
Proxy-Server
ABP-RDT
GBN-RDT
1 lab0 WarmUp
1.1. UDP
UDPClient.py
from socket import*
serverName = '127.0.0.1' # ip or hostname , if is hostname,automatically carry out DNS lookup to find correspond ip
serverPort = 12000 # designate destination port number
clientSocket = socket(AF_INET,SOCK_DGRAM);# create client socket(ipv4,udp), clientPort is automatically allocated by OS
message = input ...
计算机网络自顶向下: Wireshake Lab --- HTTP DNS UDP TCP
lab1 Getting Start
用Wireshake捕获一个GET请求
下载实验相关文件, linux下执行apt install wireshark下载
参照指导书,下载Wireshake软件,这个软件可以捕获计算机发出或接受的数据包(package,其实主要是捕获链路层(link layer)的帧(frame),因为该数据帧封装(encapsulate)了所有的上层协议)
选择Wlan接口(wireless local-area network,这里指wifi),linux下选择wlp1s0接口,开启捕获
访问这个网站以发出get请求,Wireshake会捕获这个HTTP信息
注意:
关闭VPN
访问目标网站后,清除浏览器缓存可再次抓包
从上图,我们得到以下信息:
我在21:02:28.468029时发出了GET请求,在21:02:28.735677时收到了服务器的HTTP OK 回复
我电脑(source)是IP地址为192.168.0.105, 服务器(Destination)IP地址为128.119.245.12
lab2 HTTP
2 ...
哈工大操作系统: 实验lab1~8
前言
Learning operating system by coding it!
实验0 实验环境搭建
reference1
reference2
遇到的问题:在编译linux0.11时,出现fatal error:asm/ioctl.h: No such file or directory,loctl.h这个文件是在库linux-lib-dev中的,而且我已经安装了这个库,但还是有这个错误
解决方法:使用i386版本的linux-libc-dev
sudo apt-get install linux-libc-dev:i386
实验1 操作系统的引导
1. 改写bootsect.s
我们只需要bootsect.s源码中打印字符串的部分,因为不涉及迁移bootsect从0x07c00到0x90000的操作,所以bootsect.s读入内存后还是在0x07c00的位置,因此要添加mov es, #07c0才能使es:bp指向正确的字符串起始位置。此外,cx参数的大小为字符串大小+6,这里的6是3个CR/LF (carriage return/line feed: 13 ...
CMU CS15213: CSAPP lab1~4
lab1 dataLab
前提
确保有一个linux系统,并已经执行过以下两条命令:
安装gcc:sudo apt-get install build-essential
安装gcc的交叉编译环境.):sudo apt-get install gcc-multilib,因为实验的程序需要以32位方式编译
在CMU的CSAPP网站上下载实验所需资料,包括** README, Writeup,Self-Study Handout,** 这三部分均包含对实验的要求说明(Handout的说明在其包含的bits.c文件中由注释给出),Self-Study Handout包括用于测试的文件
1.bitXor(x,y)
要用~和&实现异或^,即将结果中 1-0,0-1对应的位设置为1
x&y中为1的位(bit)对应 1-1; 取反后为:0-0、0-1、1-0;
(x&y)为1的位(bit)对应 0-0; 取反后为:1-1、0-1、1-0;
两个做交集即为结果。(位向量可以表示集合,&,|,~可视为 交,并,补操作)
/*
bitXor - x^y using o ...
汇编语言实践
前言:
前前后后看完这本书,做完所有实验和检测点,用了接近一个月的时间,除了最后几天比较认真,其余时间是比较懒散的,这本书其实最多半个月就能解决掉。接下来会步入CSAPP第三章的学习,争取早日把有名的bomb lab完成了
实验1 查看CPU和内存,用机器指令和汇编指令编程
debug环境搭建:参考此文
assignment 1
用A命令向内存中写入汇编指令,用U命令查看
用R命令分别修改CS、IP寄存器,即CS:IP的指向,用T命令逐条执行
assignment 2
写入并查看指令
修改_CS:IP_指向
执行指令,计算282^828,结果为 AX=0100HAX = 0100HAX=0100H
assignment 3
用D命令查找,最终在FFFF5H→FFFFCH(FFFF:0005→FFFF:000C)FFFF5H \to FFFFCH(FFFF:0005 \to FFFF:000C)FFFF5H→FFFFCH(FFFF:0005→FFFF:000C)发现dd/mm/yydd/mm/yydd/mm/yy字样的生产日期
尝试用E ...