OSTEP

光風霽月發表於2024-07-31

OSTEP jyy

0x 01 reference

官網

教學影片


1.why learn OS

1.解決一個問題的步驟:why-what-how
為什麼要學習作業系統
什麼是作業系統
怎樣學習作業系統

2.三個根本問題
(1)作業系統服務誰
程式=狀態機
課程涉及:多執行緒Linux應用程式
(2)(乘機/應用視角)作業系統為程式提供什麼服務
作業系統=物件+API(用來操縱物件)
課程涉及:POSIX+部分Linux特性
(3)(實現/硬體角度)如何實現作業系統提供的服務
作業系統=C程式
課程涉及:xv6,自制迷你作業系統

2.code

說明 操作
檢視使用者名稱 uname -a
傳送ACWing配置 scp .bashrc .vimrc .tmux.conf:...
下載tldr(too long dont read) sudo apt-get install tldr

3. wrong when install tldr

報錯,出現使用者名稱 is not in the sudoers file.
是因為當前的使用者沒有加入到sudo的配置檔案裡
解決方案:

步驟 方法
切換到root使用者 su - root
修改配置檔案 vim /etc/sudoers
修改 增加配置, 在開啟的配置檔案中,找到ununtu/root ALL=(ALL) ALL, 在下面新增一行:your_user_name ALL=(ALL) ALL,wq!退出,這個檔案是隻讀的,所以需要加!在ubuntu下是最後一行

4. some jyy wonderful operating

功能 命令
在vim裡面編譯C/C++ :!gcc/g++ % -o main (% 獲取當前檔名)
在vim裡面編譯並執行C++ :!g++ % -o main && ./main
wget用於從網路上下載資源,沒有指定目錄,下載資源回預設為當前目錄。wget支援HTTP,HTTPS和FTP協議,可以使用HTTP代理 wget url

0x 02 what is Programs and Compilers

1. notes

程式就是狀態機

數字系統是狀態機,程式執行在數字系統上,因而程式也應該是狀態機。

在 C 語言中,程式中所有的東西(堆,棧)就是程式的狀態,每執行一條一句,程式的狀態就會變一下。

include的形式語義就是複製貼上,它是在預編譯階段處理的,例如我們 #include <tets.c> , 在預處理階段,會從一個目錄找到 include 的 test.c 檔案,然後將它的內容複製貼上到原始碼中。

2. more instruction

gdb layout src
asm volatile(“rdrand %rax”);
info proc mappings :檢視程序資訊
unist: unix standard library

3. bug

#define FOE_EACH(_) _(X) _(Y);
#define DEFINE(X) int X, X1;

FOE_EACH(DEFINE)
/*
    我們的本意是執行:
    int X, X1; int Y, Y1;
    但是我們執行是:
    int X, X1; int Y, X1;
  	這裡的X1重複定義了
  	這是因為X1的X並不能被識別,它會被認為是一個字串
	正確的寫法是:
	#define DEFINE(X) int X, X##1
	這樣X##1的X就可以被識別
*/

4. Unix’s philosophy

  • Make each program do one thing well
  • Expect the output of every program to become the input to anothe