linux下找出核心符號資訊的4種方法

卜麗瑩發表於2020-12-30

在核心除錯中由一個符號的地址找到對應的符號名稱非常有助於我們對核心的除錯。下面將介紹4種方式來獲得核心符號資訊的4種方法。

1.從 System.map 檔案中得到地址
System.map檔案在編譯核心時生成,包含了核心在編譯時的靜態符號資訊。

grep do_fork /boot/System.map-4.15.0-128-generic
1
就可以通過do_fork函式名來獲得函式的地址
在這裡插入圖片描述

grep ffffffff810905b0 /boot/System.map-4.15.0-128-generic
1
就可以通過ffffffff810905b0地址來獲得該地址的函式名字
在這裡插入圖片描述

2.從 /proc/kallsyms 檔案中獲得地址
/proc/kallsyms檔案中包含了核心中的符號表。

cat /proc/kallsyms | grep do_fork
1
就可以通過do_fork函式名來獲得函式的地址

cat /proc/kallsyms | grep ffffffff810905b0
1
就可以通過ffffffff810905b0地址來獲得該地址的函式名字

3.使用 nm 命令從 vmlinux 讀取地址
vmlinux是核心編譯後產生的原始的檔案,包含除錯資訊。

nm vmlinux | grep do_fork
1
就可以通過do_fork函式名來獲得函式的地址

nm vmlinux | grep ffffffff810905b0
1
就可以通過ffffffff810905b0地址來獲得該地址的函式名字

4.通過核心提供的函式來獲得
kallsyms_lookup_name()
1
已知核心符號,獲取核心符號地址。

sprint_symbol()
1
已知核心符號地址, 獲取核心符號名。

相關文章