mit-6.828 Lab Tools
Lab Tools
目錄
寫在前面
作業系統小學期選擇了做mit6.828的lab,非常具有挑戰性!希望可以記錄下學習的內容和自己努力進步的點滴~
GDB
-
linux 程式除錯工具
-
gdb的目的主要是讓你知道程式內部正在執行什麼程式碼,或者是當程式崩潰的時候正在執行什麼程式碼
-
GDB主要可以做四種事情來幫助你找到bug:
- 啟動你的程式,指定任意可以影響程式行為的引數。
- 讓你的程式在指定的條件停住
- 測試你的程式停止的時候發生了什麼
- 改變程式內部的變數,來改正程式的錯誤繼續執行
ctrl + C,終止執行 c , 繼續執行 si (or stepi), 執行一條機器指令 b function or b file:line or b *addr 設定斷點 info break 檢視斷點的資訊 delete 斷點號 ,刪除第n 個斷點 n 單步執行,不進入函式 step 單步除錯,進入函式 bt 顯示當前程式的函式呼叫堆疊 info registers 檢視暫存器的內容 x/Nx addr 二進位制顯示addr地址向下的n 個字 的內容 x/Ni addr 彙編形式顯示addr地址向下的n 條指令 x/Ni $eip 顯示當前指令下的 n 條指令 symbol-file file thread n 執行指定執行緒 info thread 檢視執行緒資訊
GNU
GPL (通用公共許可證)
- GPL,是GNU General Public License的縮寫,是GNU通用公共授權非正式的中文翻譯。
- 大多數軟體許可證決意剝奪你共享和修改軟體的自由。相比之下,GNU通用公共許可證試圖保證你共享和修改軟體的自由。
QEMU
ELF 可執行檔案的格式
最詳細解析:
-
Executable and Linkable Format
-
ELF檔案的載入過程(load_elf_binary函式詳解)
https://blog.csdn.net/gatieme/article/details/51628257
從編譯/連結和執行的角度看,應用程式和庫程式的連線有兩種方式。
一種是固定的、靜態的連線,另一種是動態連結;這樣,就有了兩種不同的ELF格式映像。
- 一種是靜態連結的,在裝入/啟動其執行時無需裝入函式庫映像、也無需進行動態連線。
- 另一種是動態連線,需要在裝入/啟動其執行時同時裝入函式庫映像並進行動態連結。
-
ELF檔案內容
Verbose mode
https://www.computerhope.com/jargon/v/verbose-mode.htm
-
A verbose mode is an option available in many computer operating systems, including Microsoft Windows, macOS, and Linux. It provides additional details as to what the computer is doing and what drivers and software it is loading during startup. This level of detail can be very helpful for troubleshooting problems with hardware or software, if errors are occurring during startup or after the operating system has loaded. Below is an example of verbose output in a Windows command line screen.
-
There are several ways to enable Verbose Mode. During startup, the screen may display which key(s) to press on the keyboard to enable Verbose Mode. Usually, users would press the Esc (escape) key for Linux, Ctrl+V keys for Microsoft Windows, and Command-V keys for macOS.
Makefile
-
一個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Shell指令碼一樣,也可以執行作業系統的命令。
-
所要完成的Makefile 檔案描述了整個工程的編譯、連線等規則。其中包括:工程中的哪些原始檔需要編譯以及如何編譯、需要建立哪些庫檔案以及如何建立這些庫檔案、如何最後產生我們想要的可執行檔案。儘管看起來可能是很複雜的事情,但是為工程編寫Makefile 的好處是能夠使用一行命令來完成“自動化編譯”,一旦提供一個(通常對於一個工程來說會是多個)正確的 Makefile。編譯整個工程你所要做的事就是在shell 提示符下輸入make命令。整個工程完全自動編譯,極大提高了效率。
-
make
是一個命令工具,它解釋Makefile 中的指令。在Makefile檔案中描述了整個工程所有檔案的編譯順序、編譯規則。Makefile 有自己的書寫格式、關鍵字、函式。像C 語言有自己的格式、關鍵字和函式一樣。而且在Makefile 中可以使用系統shell所提供的任何命令來完成想要的工作。Makefile在絕大多數的IDE 開發環境中都在使用,已經成為一種工程的編譯方法。