日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

elf section类型_在 498 行极小 OS 上跑标准 ELF 程序

發(fā)布時(shí)間:2024/9/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elf section类型_在 498 行极小 OS 上跑标准 ELF 程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文首發(fā)于 在 498 行極小系統(tǒng)跑標(biāo)準(zhǔn) ELF 程序

簡(jiǎn)介

ELF 在 Linux 系統(tǒng)中作為標(biāo)準(zhǔn)可執(zhí)行文件格式已經(jīng)存在了 ~25 年。

如果要在 Linux 下直接研究 ELF,通常很難繞過(guò) Linux 本身的復(fù)雜度。

為了降低學(xué)習(xí) ELF 的門檻,今天特地引薦一個(gè)極小的系統(tǒng),這個(gè)小系統(tǒng)不僅有 “Bootloader”,有 “OS”,還能加載和運(yùn)行標(biāo)準(zhǔn)的可以打印 Hello 的 ELF 程序。

所有這些都由 CS630-Qemu-Lab 提供。它是一套用于學(xué)習(xí)舊金山大學(xué)課程 CS 630: Advanced Microcomputer Programming 的極簡(jiǎn)實(shí)驗(yàn)環(huán)境,是一個(gè)由泰曉科技主導(dǎo)的開源項(xiàng)目。

它可以獨(dú)立使用,也可以在 Linux Lab 下使用。下面介紹如何在 Linux Lab 下使用它。

準(zhǔn)備環(huán)境

先準(zhǔn)備 Linux Lab(非 Ubuntu 系統(tǒng)請(qǐng)?zhí)崆鞍惭b好 Docker):

$ git clone https://gitee.com/tinylab/cloud-lab $ cd cloud-lab $ tools/docker/run linux-lab

執(zhí)行完正常會(huì)看到一個(gè)啟動(dòng)了 LXDE 桌面的瀏覽器,進(jìn)去以后,點(diǎn)擊桌面的控制臺(tái),啟動(dòng)后下載 CS630-Qemu-Lab 到 /labs 目錄下:

$ cd /labs $ git clone https://gitee.com/tinylab/cs630-qemu-lab $ cd cs630-qemu-lab

一鍵運(yùn)行 ELF

接下來(lái),通過(guò) CS630 Qemu Lab 提供的極速體驗(yàn)方式,一鍵編譯 Bootloader, OS 和 Hello 匯編程序,并自動(dòng)依次運(yùn)行:

$ make boot SRC=res/elfexec.s APP=res/hello.s

運(yùn)行完以后,會(huì)彈出一個(gè) Qemu 界面,并在屏幕打印一個(gè) Hello 字符串。

默認(rèn)是從軟盤加載程序,如果要改為硬盤,可以用:

$ make boot-hd SRC=res/elfexec.s APP=res/hello.s

初步解讀

這個(gè)實(shí)驗(yàn)主要包含如下三部分:

  • “Bootloader”
  • src/quikload_floppy.s:實(shí)際代碼只有 68 行
  • src/quikload_hd.s:實(shí)際代碼只有 44 行
  • “OS”
  • res/elfexec.s:實(shí)際代碼只有 430 行,有提供 write, exit 等幾個(gè)小的系統(tǒng)調(diào)用,還能加載標(biāo)準(zhǔn) ELF
  • “APP”
  • res/hello.s:實(shí)際代碼僅 19 行,可以打印 Hello 字符串,編譯生成標(biāo)準(zhǔn)的 ELF 程序

以 Floppy 版本為例,上述 bootloader 和 os 加起來(lái)僅有 498 行代碼,含注釋和空行也才 644 行,相比龐大的 Linux 來(lái)講,可謂極其微小,因此特別適合核心 ELF 原理分析。

題外話

CS630 Qemu Lab 的匯編語(yǔ)言實(shí)驗(yàn)案例非常豐富,全部以 X86 為平臺(tái),以 Linux AT&T 匯編語(yǔ)法撰寫,代碼簡(jiǎn)潔清晰,非常適合學(xué)習(xí)。例如,跑一個(gè) rtc 程序:

$ make boot SRC=src/rtc.s

下面是演示視頻:

小結(jié)

Jonathan Blow 在莫斯科 DevGAMM 上,做了一個(gè)題為《阻止文明倒塌》的演講。

這個(gè)演講反應(yīng)了一個(gè)普遍的情況,某個(gè)項(xiàng)目,隨著功能的迭代和技術(shù)的發(fā)展,其功能不斷豐富,復(fù)雜度卻在不斷增加。對(duì)于后來(lái)者,學(xué)習(xí)難度和門檻就變得越來(lái)越高。很多內(nèi)容,由于逐步遠(yuǎn)離了當(dāng)初設(shè)計(jì)者和開發(fā)者的環(huán)境,新來(lái)的維護(hù)人員極易出現(xiàn)理解偏差,隨著老一輩 Maintainers 逐漸地離開,系統(tǒng)可能會(huì)變得越來(lái)越難以維護(hù)。

Linux 有點(diǎn)類似這樣,它正在變得越來(lái)越復(fù)雜,我們學(xué)習(xí)一個(gè)可執(zhí)行文件格式,得抱著幾本大磚頭 Linux 圖書,并從數(shù)萬(wàn)行代碼中找出那些關(guān)聯(lián)的片段,看上去就是一個(gè)令人畏懼的工程。

泰曉科技致力于降低 Linux 技術(shù)的學(xué)習(xí)和研究門檻,我們正在做很多努力,去簡(jiǎn)化問(wèn)題的復(fù)雜度,一方面構(gòu)建了多套極簡(jiǎn)又容易快速上手的實(shí)驗(yàn)環(huán)境,另外一方面,從產(chǎn)品實(shí)戰(zhàn)的細(xì)微處追本溯源,分享了大量的技術(shù)原創(chuàng)文章,爭(zhēng)取見微知著。

后續(xù)將進(jìn)一步深度解讀這個(gè) 498 行的極小系統(tǒng),敬請(qǐng)關(guān)注;加微信號(hào) tinylab 可申請(qǐng) “Linux ELF 剖析”系列文章pdf合集。

歡迎關(guān)注專欄作者開設(shè)的 C 語(yǔ)言進(jìn)階課《360° 剖析 ELF》, 進(jìn)一步學(xué)習(xí) Linux ELF 工作原理。


掃碼關(guān)注并加 tinylab,可獲贈(zèng)該系列文章 pdf 合集

Linux ELF 系列文章合集(持續(xù)連載中):

  • 吳章金falcon:上手9套工具,玩轉(zhuǎn)二進(jìn)制文件
  • 吳章金falcon:為 Linux a.out 舉行一個(gè)特殊的告別儀式
  • 吳章金falcon:在 498 行極小 OS 上跑標(biāo)準(zhǔn) ELF 程序
  • 吳章金falcon:如何創(chuàng)建一個(gè)可執(zhí)行的 Linux 共享庫(kù)
  • 吳章金falcon:深度剖析 Linux 共享庫(kù)的“位置無(wú)關(guān)”實(shí)現(xiàn)原理
  • 吳章金falcon:通過(guò)操作 Section 為 Linux ELF 程序新增數(shù)據(jù)
  • 吳章金falcon:實(shí)例解析 Linux C 語(yǔ)言程序之變量類型
  • 吳章金falcon:《360°剖析Linux ELF》視頻課程新增 15 份實(shí)驗(yàn)材料,累計(jì)已超 70 份

總結(jié)

以上是生活随笔為你收集整理的elf section类型_在 498 行极小 OS 上跑标准 ELF 程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。