iT邦幫忙

鐵人檔案

2018 iT 邦幫忙鐵人賽
回列表
Software Development

與妖精共舞:在 RISC-V 架構上使用 GO 語言實作 binutils 工具包 系列

在 Unix-like 系統之中,ELF 檔案格式可說是整體運作的基石,然而因為太過底層,不少人雖然知道它的存在,卻只能模糊地理解個概況。

筆者為了自身學習、研究的需求,以正在興起的 RISC-V 開放指令集架構為平台、功能集單純的 GO 語言作為主要武器、參考經典的 GNU Binutils 工具包的功能,透過邊做邊學的方式第一線接觸過去總是沒有好好理解的 ELF 檔案格式。

筆者預計在前 2/3 的部份,按照 binutils 的功能劃分,實作一些原先工具程式的子集,並熟悉 GO 語言原生的 ELF 函式庫;後 1/3 則選擇一些原創專案來開發,以紀錄開發日誌的方式完成鐵人賽。

鐵人鍊成 | 共 30 篇文章 | 29 人訂閱 訂閱系列文 RSS系列文 團隊晶心壯士
DAY 11

第十一日:RISC-V 指令集架構介紹

前情提要 昨日總算是克服了我們的簡單目標,最後一塊拼圖就是在前幾天規劃的 rvgc 函式庫。今天就讓我們開始探索 RISC-V 的指令集架構吧!主要的參考來源...

2017-12-29 ‧ 由 高魁良 分享
DAY 12

第十二日:RISC-V 整數基本指令集的五十道陰影

前情提要 昨日初步觀察 RISC-V 的指令集架構的一些特徵,如暫存器編排、指令結構設計哲學與主要的指令型態等。今天,我們則要深入介紹 RISC-V 的指令。...

2017-12-30 ‧ 由 高魁良 分享
DAY 13

第十三日:實作 rvgc 函式庫之一

前情提要 前兩日介紹了一下 RISC-V 的整數基本指令集架構,我們發現到設計者的巧思與其中的簡潔之美;跳脫欣賞的角度,我們也需要這些知識來幫助 rvgc 函...

2017-12-31 ‧ 由 高魁良 分享
DAY 14

第十四日:實作 rvgc 函式庫之二

前情提要 各位讀者,新年快樂!昨日在 rvgc 函式庫中加入了 R-type 指令的轉譯,看起來至少 add 指令的翻譯是正確的。今天的目標則是把剩下的數十道...

2018-01-01 ‧ 由 高魁良 分享
DAY 15

第十五日:rvgc 函式庫測試--靜態連結程式

前情提要 完成了 rvgc 函式庫的 InstToBin 函式的轉譯功能之後,我們理論上應該可以支援更豐富的組合語言輸入檔了!今天就來驗證一下其他的組語檔案作...

2018-01-02 ‧ 由 高魁良 分享
DAY 16

第十六日:使用 size 觀察各區段大小

前情提要 波瀾壯闊的 rvgc 與 as 篇大致告一段落。今日回到一般的 binutils 工具程式中,目標是:size! 使用方法與功能介紹 size 工...

2018-01-03 ‧ 由 高魁良 分享
DAY 17

第十七日:strip 原理介紹

前情提要 有過 readelf 的經驗之後,我們已經對 ELF 格式中的檔頭內容瞭若指掌,所以 size 也就不費吹灰之力的完成了。接下來是小型工具程式之二的...

2018-01-04 ‧ 由 高魁良 分享
DAY 18

第十八日:nm 工具程式介紹

前情提要 昨日介紹了 strip,原訂今日緊接著實作的部份,但是因為時間分配的考量,筆者先繼續介紹其他的工具程式。今日的主角是:nm。 使用方法與功能介紹...

2018-01-05 ‧ 由 高魁良 分享
DAY 19

第十九日:nm 工具程式實作

前情提要 昨日介紹 nm 的用法,今日則讓我們來實作看看吧! 實作 從 size 與 readelf 工具程式的經驗裡,我們對於 ELF 的檔頭操作已經很熟...

2018-01-06 ‧ 由 高魁良 分享
DAY 20

第二十日:objdump 工具介紹

前情提要 到昨日為止,大致依照第 15 日的規劃行進,但是目前還欠著 strip 實作的債;主要原因是 strip 當初不小心被歸類在小型程式裡面,但是它會涉...

2018-01-07 ‧ 由 高魁良 分享