elf section类型_在 498 行极小 OS 上跑标准 ELF 程序
簡介
ELF 在 Linux 系統中作為標準可執行文件格式已經存在了 ~25 年。
如果要在 Linux 下直接研究 ELF,通常很難繞過 Linux 本身的復雜度。
為了降低學習 ELF 的門檻,今天特地引薦一個極小的系統,這個小系統不僅有 “Bootloader”,有 “OS”,還能加載和運行標準的可以打印 Hello 的 ELF 程序。
所有這些都由 CS630-Qemu-Lab 提供。它是一套用于學習舊金山大學課程 CS 630: Advanced Microcomputer Programming 的極簡實驗環境,是一個由泰曉科技主導的開源項目。
它可以獨立使用,也可以在 Linux Lab 下使用。下面介紹如何在 Linux Lab 下使用它。
準備環境
先準備 Linux Lab(非 Ubuntu 系統請提前安裝好 Docker):
$ git clone https://gitee.com/tinylab/cloud-lab $ cd cloud-lab $ tools/docker/run linux-lab執行完正常會看到一個啟動了 LXDE 桌面的瀏覽器,進去以后,點擊桌面的控制臺,啟動后下載 CS630-Qemu-Lab 到 /labs 目錄下:
$ cd /labs $ git clone https://gitee.com/tinylab/cs630-qemu-lab $ cd cs630-qemu-lab一鍵運行 ELF
接下來,通過 CS630 Qemu Lab 提供的極速體驗方式,一鍵編譯 Bootloader, OS 和 Hello 匯編程序,并自動依次運行:
$ make boot SRC=res/elfexec.s APP=res/hello.s運行完以后,會彈出一個 Qemu 界面,并在屏幕打印一個 Hello 字符串。
默認是從軟盤加載程序,如果要改為硬盤,可以用:
$ make boot-hd SRC=res/elfexec.s APP=res/hello.s初步解讀
這個實驗主要包含如下三部分:
- “Bootloader”
- src/quikload_floppy.s:實際代碼只有 68 行
- src/quikload_hd.s:實際代碼只有 44 行
- “OS”
- res/elfexec.s:實際代碼只有 430 行,有提供 write, exit 等幾個小的系統調用,還能加載標準 ELF
- “APP”
- res/hello.s:實際代碼僅 19 行,可以打印 Hello 字符串,編譯生成標準的 ELF 程序
以 Floppy 版本為例,上述 bootloader 和 os 加起來僅有 498 行代碼,含注釋和空行也才 644 行,相比龐大的 Linux 來講,可謂極其微小,因此特別適合核心 ELF 原理分析。
題外話
CS630 Qemu Lab 的匯編語言實驗案例非常豐富,全部以 X86 為平臺,以 Linux AT&T 匯編語法撰寫,代碼簡潔清晰,非常適合學習。例如,跑一個 rtc 程序:
$ make boot SRC=src/rtc.s下面是演示視頻:
小結
Jonathan Blow 在莫斯科 DevGAMM 上,做了一個題為《阻止文明倒塌》的演講。
這個演講反應了一個普遍的情況,某個項目,隨著功能的迭代和技術的發展,其功能不斷豐富,復雜度卻在不斷增加。對于后來者,學習難度和門檻就變得越來越高。很多內容,由于逐步遠離了當初設計者和開發者的環境,新來的維護人員極易出現理解偏差,隨著老一輩 Maintainers 逐漸地離開,系統可能會變得越來越難以維護。
Linux 有點類似這樣,它正在變得越來越復雜,我們學習一個可執行文件格式,得抱著幾本大磚頭 Linux 圖書,并從數萬行代碼中找出那些關聯的片段,看上去就是一個令人畏懼的工程。
泰曉科技致力于降低 Linux 技術的學習和研究門檻,我們正在做很多努力,去簡化問題的復雜度,一方面構建了多套極簡又容易快速上手的實驗環境,另外一方面,從產品實戰的細微處追本溯源,分享了大量的技術原創文章,爭取見微知著。
后續將進一步深度解讀這個 498 行的極小系統,敬請關注;加微信號 tinylab 可申請 “Linux ELF 剖析”系列文章pdf合集。
歡迎關注專欄作者開設的 C 語言進階課《360° 剖析 ELF》, 進一步學習 Linux ELF 工作原理。
掃碼關注并加 tinylab,可獲贈該系列文章 pdf 合集
Linux ELF 系列文章合集(持續連載中):
- 吳章金falcon:上手9套工具,玩轉二進制文件
- 吳章金falcon:為 Linux a.out 舉行一個特殊的告別儀式
- 吳章金falcon:在 498 行極小 OS 上跑標準 ELF 程序
- 吳章金falcon:如何創建一個可執行的 Linux 共享庫
- 吳章金falcon:深度剖析 Linux 共享庫的“位置無關”實現原理
- 吳章金falcon:通過操作 Section 為 Linux ELF 程序新增數據
- 吳章金falcon:實例解析 Linux C 語言程序之變量類型
- 吳章金falcon:《360°剖析Linux ELF》視頻課程新增 15 份實驗材料,累計已超 70 份
總結
以上是生活随笔為你收集整理的elf section类型_在 498 行极小 OS 上跑标准 ELF 程序的全部內容,希望文章能夠幫你解決所遇到的問題。