視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位

rlk8888發表於2022-03-30

今天更新的視訊節目,講另外一個有趣的話題,如何用gdb來除錯ARM64的啟動彙編程式碼,可能大家都想嘗試去單步除錯啟動彙編程式碼,但是又苦苦不知道怎麼搞。在上一期節目中,我們和大家詳細分析了ARM64啟動彙編程式碼,還有在啟動彙編程式碼裡面做了哪些記憶體對映。有不少小夥伴看了那一期視訊,都覺得不錯,有不少小夥伴給笨叔提出了批評,覺得笨叔講的太囉嗦,程式碼講的過細,聽的有點暈暈的。沒有辦法,眾口難調。世間上難得有一個fae可以苦口婆心地和你講Linux 5.0和ARM64,對吧。這樣的fae去哪裡找呢?


視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位


錄製視訊是一種興趣愛好

笨叔錄製視訊是一種興趣愛好。我們的奔跑吧的視訊,和別家視訊不一樣,我們只收了很少的錢,但是呢,我們錄製了很多視訊,我們現在第一季已經錄製好的視訊就超過40小時。後面還會免費給大家來錄製基於Linux 5.0核心的記憶體管理程式碼分析視訊。 對的,您沒有聽錯,後面錄的Linux 5.0原始碼分析視訊是不再收費的。這是全球第一家也是唯一一家Linux 5.0原始碼手把手分析的視訊。可能有的讀者會問了,笨叔,你們錄這麼多視訊,收費這麼低,這是為啥。其實很簡單,我們不靠賣視訊生活,我們都有正當的工作,可能很多小夥伴都知道了,笨叔在上海一家小公司當小fae,另外笨叔業餘時間也在研究股票,研究巴菲特,所以,我們不靠賣視訊賺錢。我們錄視訊純粹是為了興趣愛好。有的小夥伴說了,竟然錄視訊不是為了賺錢,那為什麼不免費?我們知道,一旦免費,就很少有朋友真的認真去看視訊了,而且不但很少人看,還有一些噴子來噴,所以,有噴子來噴的話,我們也要設定門檻,歡迎來噴,但是你先付999。所以,我們設定一定門檻,給真正有需要的朋友來觀看。如果你覺得笨叔錄的視訊對你工作有幫助,你也不在乎那點小錢,對吧。我們也真誠呼籲一下,正在看這個視訊的小夥伴,可以幫忙推薦一下。

程式碼分析8 - 單步除錯ARM64啟動彙編和重定位

按照慣例,我們先上這一期節目中面試常見的必考題。

1. 什麼是載入地址?什麼是執行地址?什麼是連結地址?

2. 什麼是位置無關的彙編指令,什麼是位置有關的彙編指令?

3. 什麼是重定位?

4. 在實際專案開發中,為什麼要刻意設定載入地址,執行地址以及連結地址不一樣呢?

5. 在U-boot啟動時重定位是如何實現的?

6. 在核心啟動時核心映像重定位是如何實現的?


視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位


在這期視訊節目之前,我們先做一小實驗,我們在上一期節目中講過的幾個彙編函式裡設定斷點,看看gdb會停留在哪個斷點裡。

視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位




視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位



視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位


啟動GDB來除錯之後,我們發現斷點只停留在斷點8上,即__primary_switched函式,該函式是在__enable_mmu函式之後,也就是說GDB只能除錯啟動MMU之後的程式碼,這是為什麼呢?

另外,從System.map檔案中可以查詢到stext和__primary_switched函式的地址都是在核心態的虛擬地址空間裡。

好了,我們這一期節目,就和大家來好好聊聊這個話題。


要弄明白上面的疑問,我們首先要知道下面幾個重要概念。

  • 載入地址:指程式碼儲存的實體地址。比如ARM64處理器上電覆位啟動是從0x0地址開始取第一條指令的(假設異常向量表存放在0x0地址處),所以通常這個地方存放異常向量表的處理函式。
  • 執行地址:是指程式執行時的地址。
  • 連結地址:指在編譯連結時指定的地址,程式設計人員設想將來程式要執行的地址。程式中所有標號的地址在連結後便確定了,不管程式在哪執行都不會改變。使用aarch64-linux-gnu-objdump工具進行反彙編檢視的就是連結地址。

    上面三個地址,什麼時候會一樣,什麼時候又會不一樣呢?


視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位


笨叔在這一期視訊中,會告訴你重定位的祕密,還有教你怎麼單步除錯Linux 5.0核心的ARM64的啟動彙編程式碼。

視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位


有興趣的小夥伴可以訂閱奔跑吧旗艦篇視訊節目,點選“閱讀原文”訂閱喲!

藍色奔跑吧第二版已經交稿

笨叔歷時1年新修訂的藍色奔跑吧已經交稿,第二版會新增很多新內容,而且大部分內容是重新重構的,第二版完全基於Linux5.0 + ARM64/x86_64來編寫的。書稿在3月初已經交稿,請大家耐心等待。想看Linux 5.0的程式碼講解,可以訂閱旗艦篇視訊課程,笨叔會在視訊裡詳細和大家分析5.0程式碼的實現。

  1. 第二版詳細目錄請登入“奔跑吧linux社群”微信公眾號,輸入“奔跑吧第二版”索取。
  2. 全新的一套奔跑卷題目,有興趣同學可以登入“奔跑吧linux社群”微信公眾號,輸入“奔跑卷”索取。

本書預計2020年盛夏出版,到時候笨叔約大家吃西瓜,看奔跑吧!


視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005277/viewspace-2885063/,如需轉載,請註明出處,否則將追究法律責任。

相關文章