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 21

第二十一日:objdump 實作之一

前情提要 昨日介紹了 objdump 工具程式,今天讓我們開始實作吧! 設計大綱 筆者根據自己的使用經驗與理解,簡化反組譯的過程,列出以下步驟: 讀取 E...

2018-01-08 ‧ 由 高魁良 分享
DAY 22

第二十二日:objdump 實作之完結

前情提要 昨日實作了部份的 objdump 工具程式,大致上是完成了讀取檔案和傳送機器編碼的部份。今天就讓我們接著實作下去吧! 回顧:設計大綱 筆者根據自己...

2018-01-09 ‧ 由 高魁良 分享
DAY 23

第二十三日:連結的概念

前情提要 目前為止我們已經有了(差強人意的)readelf、objdump、nm、和 as。隨著鐵人賽接近尾聲,筆者決定將時間投資在最沒有確定性的最後一片拼圖...

2018-01-10 ‧ 由 高魁良 分享
DAY 24

第二十四日:RISC-V 的重定向項目

前情提要 昨天大概在抽象的層面理解連結這個動作的必要性和最後可以產出的結果,今天就來讓我們一窺 RISC-V 如何提供連結的選項。 RISC-V 的連結選項...

2018-01-11 ‧ 由 高魁良 分享
DAY 25

第二十五日:眾裡尋 relocation type 千百度......

前情提要 昨日正準備要有所作為,卻發現上游裡面有根本的短少!這該怎麼辦才好呢?決定今天來好好研究一下貢獻的規則,go 語言社群的規則和 github 上面直接...

2018-01-12 ‧ 由 高魁良 分享
DAY 26

第二十六日:探究 Rela 結構

前情提要 昨日在 riscv-go 上面的 riscvdev 分支裡挖掘到了重定向型態短少的原因,也從隔壁的 riscv-binutils-gdb 專案取得了...

2018-01-13 ‧ 由 高魁良 分享
DAY 27

第二十七日:readelf 重定擴充

前情提要 昨日直接地閱讀 ELF 檔而找到這些重定的樣貌,今天我們來設法將這些資訊轉給 readelf,藉此累積一些重定內容的操作方式吧! 實作目標 由於我...

2018-01-14 ‧ 由 高魁良 分享
DAY 28

第二十八日:as 強化(上)

前情提要 昨日設計了一個更適合接下來的開發的小程式,並且將展示重定區段的功能新增進入 readelf 裡面。今天的目標就是試試看我們能不能產生重定區段,並且讓...

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

第二十九日:as 強化(下)

前情提要 昨日為 as 的功能加強起了個頭,今天讓我們來完成它吧! 回顧:實作目標 理解 call 虛擬指令,將之轉換為 auipc+jalr 指令配對...

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

第三十日:結語

學到的東西 既然是最後一篇的總檢討,當然不能列出之前就已經學會的部份。這裡列出的,全部都是這三十天之內累積起來的內容: RISC-V 使用 virtio...

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