在 Unix-like 系統之中,ELF 檔案格式可說是整體運作的基石,然而因為太過底層,不少人雖然知道它的存在,卻只能模糊地理解個概況。
筆者為了自身學習、研究的需求,以正在興起的 RISC-V 開放指令集架構為平台、功能集單純的 GO 語言作為主要武器、參考經典的 GNU Binutils 工具包的功能,透過邊做邊學的方式第一線接觸過去總是沒有好好理解的 ELF 檔案格式。
筆者預計在前 2/3 的部份,按照 binutils 的功能劃分,實作一些原先工具程式的子集,並熟悉 GO 語言原生的 ELF 函式庫;後 1/3 則選擇一些原創專案來開發,以紀錄開發日誌的方式完成鐵人賽。
前情提要 昨日介紹了 objdump 工具程式,今天讓我們開始實作吧! 設計大綱 筆者根據自己的使用經驗與理解,簡化反組譯的過程,列出以下步驟: 讀取 E...
前情提要 昨日實作了部份的 objdump 工具程式,大致上是完成了讀取檔案和傳送機器編碼的部份。今天就讓我們接著實作下去吧! 回顧:設計大綱 筆者根據自己...
前情提要 目前為止我們已經有了(差強人意的)readelf、objdump、nm、和 as。隨著鐵人賽接近尾聲,筆者決定將時間投資在最沒有確定性的最後一片拼圖...
前情提要 昨天大概在抽象的層面理解連結這個動作的必要性和最後可以產出的結果,今天就來讓我們一窺 RISC-V 如何提供連結的選項。 RISC-V 的連結選項...
前情提要 昨日正準備要有所作為,卻發現上游裡面有根本的短少!這該怎麼辦才好呢?決定今天來好好研究一下貢獻的規則,go 語言社群的規則和 github 上面直接...
前情提要 昨日在 riscv-go 上面的 riscvdev 分支裡挖掘到了重定向型態短少的原因,也從隔壁的 riscv-binutils-gdb 專案取得了...
前情提要 昨日直接地閱讀 ELF 檔而找到這些重定的樣貌,今天我們來設法將這些資訊轉給 readelf,藉此累積一些重定內容的操作方式吧! 實作目標 由於我...
前情提要 昨日設計了一個更適合接下來的開發的小程式,並且將展示重定區段的功能新增進入 readelf 裡面。今天的目標就是試試看我們能不能產生重定區段,並且讓...
前情提要 昨日為 as 的功能加強起了個頭,今天讓我們來完成它吧! 回顧:實作目標 理解 call 虛擬指令,將之轉換為 auipc+jalr 指令配對...