# Lab-操作系统-真象还原 **Repository Path**: lovexiaoling/lab-os-true-image-restore ## Basic Information - **Project Name**: Lab-操作系统-真象还原 - **Description**: 《操作系统-真象还原》学习与 Lab。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-09-14 - **Last Updated**: 2023-08-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 说明 > 笔记等啥的全在 [https://blog.csdn.net/qq_43098197/article/details/128596009](https://blog.csdn.net/qq_43098197/article/details/128596009) > **如果想查看我的代码,请以最后一份为准,因为前面的代码有些可能在运行的时候与书上效果一致,但后面出现问题被我修改了的代码。** > **注意:请忽略 15-系统交互 -> 05-加载用户程序** --- ## 效果图 ![](https://xiaolingimages.oss-cn-hangzhou.aliyuncs.com/typora-images/Peek-2023-01-07-23-16.gif) ## 草稿 > 一些草稿 ``` dd if=loader.bin of=hd60M.img bs=512 count=1 seek=2 conv=notrunc ``` ``` block sh ~/workspace/lab-os-true-image-restore/tool/xxd.sh ./hd80M.img 1049600 512 inode sh ~/workspace/lab-os-true-image-restore/tool/xxd.sh ./hd80M.img 1053696 512 inode_table sh ~/workspace/lab-os-true-image-restore/tool/xxd.sh ./hd80M.img 1054208 512 data sh ~/workspace/lab-os-true-image-restore/tool/xxd.sh ./hd80M.img 1365504 512 ``` ## Linux 指令 ### dd - if=文件名:源文件。 - of=文件名:目的文件。 - ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。 obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。 bs=bytes:同时设置读入/输出的块大小为bytes个字节。 - seek=blocks:从输出文件开头跳过blocks个块后再开始复制。 - count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。 - conv=notrunc:不截短输出文件 > https://www.runoob.com/linux/linux-comm-dd.html ### ld ```txt -b 指定目标代码输入文件的格式 -e 使用指定的符号作为程序的初始执行点 -m 模拟指定的链接器 -o , --output= 指定输出文件的名称 -s,--strip-all 忽略来自输出文件的所有符号信息 -Ttext= 使用指定的地址作为文本段的起始点 ``` ### readelf ```shell $ readelf [参数] ``` `-e`:相当于 `-h` + `-l` + `-S`。 ### xxd ```txt -a | -autoskip 打开/关闭 autoskip: 用一个 单独的 '*' 来 代替 空行. 默认 关闭. -c cols | -cols cols 每行表示 个字符. 默认 16 (-i: 12, -ps: 30, -b: 6). 最多 256. -g bytes | -groupsize bytes 每 个字符(每两个十六进制字符或者八个二进制数字)之间用一个空格隔开. 用 -g 0 禁止分组. 在普通模式中 默认是 2 在二进制模式中是 1. 分组并不适用于 postscript 或者 include style 选项. -l len | -len len 输出 个 字符 后 停止. -s [+][-]seek 从 infile 的 绝对 或者 相对 偏移量 开始. + 表示相对于标准输入当前的位置(如果不是 标准输入 就 没有 意义了). - 表示从文件末尾(如果和 + 连用:从标准输入当前位置)向前数一些字符,从那个地方开始. 如果没有 -s 选项, xxd 从当前位置开始. -u 用大写字母. 默认的是小写字母. ``` ## GCC 参数 | 参数 | 说明 | | | ------------- | ------------------------------------------------ | ------------------------------------------------ | | `-e` | 只运行 C 预编译器 | | | `-I` | 指定头文件位置 | | | `-c` | 只编译并生成目标文件 | | | `-o` | 指定可执行文件的名称 | | | `-s` | 只激活预处理和编译,就是指把文件编译成为汇编代码 | | |`-M`|生成程序所依赖的其它程序文件信息|| |`-D`|定义宏|`gcc -宏[=值(默认1)] -D`| ## nasm | 参数 | 说明 | | | ---- | -------------------- | ---------------- | | `-o` | 指定输出文件的文件名 | | | `-f` | 指定输出文件的格式 | | | `-E` | 仅预处理,不编译 | `nasm -E file.S` | ## 问题 ### P332 ![image-20221005190814581](https://xiaolingimages.oss-cn-hangzhou.aliyuncs.com/typora-images/image-20221005190814581.png) 相关资料: - https://blog.csdn.net/qq_27361945/article/details/54755495 ### 多线程代码实现互斥后,仍然有 GP 异常 **修改 device/timer.c 如下:** ![image-20221104122433232](https://xiaolingimages.oss-cn-hangzhou.aliyuncs.com/typora-images/image-20221104122433232.png)