国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一文教你用Kdump分析內(nèi)核崩潰原因(實(shí)例演示 ~)

2022-11-07 16:51 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

本文主要介紹kdump服務(wù)和crash的使用,并結(jié)合一個(gè)簡(jiǎn)單的實(shí)例演示如何分析內(nèi)核崩潰的原因。本文基于Linux kernel 4.19, 體系結(jié)構(gòu)為aarch64。

kdump概述

  1. 克轉(zhuǎn)儲(chǔ)

kdump 是一種基于 kexec 的內(nèi)核崩潰轉(zhuǎn)儲(chǔ)機(jī)制,用來(lái)捕獲內(nèi)核 crash(內(nèi)核崩潰)的時(shí)候產(chǎn)生的 crash dump。當(dāng)內(nèi)核產(chǎn)生錯(cuò)誤時(shí),kdump會(huì)將內(nèi)存導(dǎo)出為vmcore保存到磁盤(pán)。

  1. kdump流程

當(dāng)系統(tǒng)崩潰時(shí),kdump 使用 kexec 啟動(dòng)到第二個(gè)內(nèi)核。第二個(gè)內(nèi)核通常叫做捕獲內(nèi)核,以很小內(nèi)存啟動(dòng)以捕獲轉(zhuǎn)儲(chǔ)鏡像。第一個(gè)內(nèi)核啟動(dòng)時(shí)會(huì)保留一段內(nèi)存給kdump用。



  1. kdump的配置

  • 系統(tǒng)啟動(dòng)時(shí)為crashkernel保留內(nèi)存

可以在內(nèi)核命令行中加入如下參數(shù):crashkernel=size[@offset]。保留內(nèi)存是否預(yù)留成功,可以通過(guò)cat /proc/meminfo查看。。

cat /proc/meminfo |格雷普崩潰

  • 安裝kexec-toools

yum install kexec-tools

kexec-tool推薦使用rpm方式安裝,使用時(shí)需要和內(nèi)核版本配套。

  • 啟動(dòng)kdump服務(wù)

systemctl start kdump.service // 啟動(dòng)kdump服務(wù) service kdump status // 查看kdump狀態(tài)

  • testkdump是否可以正常轉(zhuǎn)儲(chǔ)

echo c > /proc/sysrq-trigger

如果沒(méi)有問(wèn)題,系統(tǒng)會(huì)自動(dòng)重啟,重啟后可以看到在/var/crash/目錄下生成了coredump文件。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ?


qemu使用kdump

我們經(jīng)常會(huì)使用qemu去啟動(dòng)虛擬機(jī)。qemu啟動(dòng)的內(nèi)核發(fā)生錯(cuò)誤也可以用kdump生成vmcore文件。

  1. 首先先將qemu的panic重啟關(guān)閉,防止coredump的時(shí)候發(fā)生了重啟

echo 0 > /proc/sys/kernel/panic

  1. 觸發(fā)內(nèi)核崩潰

echo c > /proc/sysrq-trigger

  1. kernel panic后,使得qemu進(jìn)入monitor模式

ctrl + A, ---> c, qemu進(jìn)入monitor模式

  1. 進(jìn)入monitor模式后,進(jìn)行coredump

dump-guest-memory -z xxx-vmcore

如下圖所示,成功在qemu 的kernel panic后,獲得了coredump文件。




使用crash分析內(nèi)核奔潰轉(zhuǎn)儲(chǔ)文件

在內(nèi)核奔潰后,如果部署了kdump, 會(huì)在/var/crash目錄中找到vmcore轉(zhuǎn)儲(chǔ)文件,vmcore文件可以配合crash工具進(jìn)行分析。

crash的版本要和內(nèi)核的版本保持一致, 比如上面成功dump了qemu arm64的coredump文件,就需要配套的arm64的crash工具進(jìn)行分析,否則會(huì)報(bào)兼容性錯(cuò)誤。

編譯 ARM64 崩潰工具:

下載:https://github.com/crash-utility/crash/releases編譯安裝: $ tar -xf 崩潰-7.2.8.tar.gz $ CD 崩潰-7.2.8/ $ 使目標(biāo)=arm64

安裝完成后,使用crash工具分析vmcore文件, vmlinux在編譯內(nèi)核時(shí)會(huì)在根目錄下生成。

崩潰 VMcore VMLinux



crash常用命令

  • bt: 查看函數(shù)調(diào)用棧

log: 查看內(nèi)核dmesg日志

struct: 查看數(shù)據(jù)結(jié)構(gòu)

struct -o [struct] : 顯示結(jié)構(gòu)體中成員的偏移 struct [struct] [address] : 顯示對(duì)應(yīng)地址結(jié)構(gòu)體的值 [結(jié)構(gòu)][地址] :簡(jiǎn)化形式顯示對(duì)應(yīng)地址結(jié)構(gòu)體的值 [結(jié)構(gòu)][地址] -xo: 打印結(jié)構(gòu)體定義和大小 [struct].member[address]: 顯示某個(gè)成員的值

  • rd: 讀取內(nèi)存內(nèi)容

rd [addr] [len]: 查看指定地址,長(zhǎng)度為len的內(nèi)存 rd -S [addr][len]: 嘗試將地址轉(zhuǎn)換為對(duì)應(yīng)的符號(hào) rd [addr] -e [addr] : 查看指定內(nèi)存區(qū)域內(nèi)容

  • dis: 進(jìn)行返匯編,查看對(duì)應(yīng)地址的代碼邏輯

ps: 查看線程狀態(tài)


ps -p [pid]: 顯示進(jìn)程父子關(guān)系 ps -t [pid]: 顯示進(jìn)程運(yùn)行時(shí)間

  • kmem: 查看內(nèi)核內(nèi)存使用情況

kmem -i: 查看內(nèi)存整體使用情況 kmem -s: 查看slab使用情況 kmem [addr]: 搜索地址所屬的內(nèi)存結(jié)構(gòu)

  • 更多其它命令通過(guò)help查看

內(nèi)核panic實(shí)例

內(nèi)核訪問(wèn)空指針產(chǎn)生panic。

  1. 驅(qū)動(dòng)制作

編寫(xiě)一個(gè)驅(qū)動(dòng),構(gòu)造一個(gè)內(nèi)核模塊訪問(wèn)空指針的異常,演示如何使用crash分析內(nèi)核奔潰的原因。

將編好的驅(qū)動(dòng)打包進(jìn)根文件系統(tǒng), 啟動(dòng)后插入內(nèi)核模塊。



  1. panic 分析

內(nèi)核的call trace如上圖所示, 將對(duì)應(yīng)的文件反匯編,找到問(wèn)題出現(xiàn)對(duì)應(yīng)的代碼。

aarch64-linux-gnu-objdump -S panic-kernel.o > test.txt

截取部分反匯編如下:

從匯編代碼可以看出, panic_foo函數(shù)的參數(shù)(x0)最終保存在x19寄存器。我們現(xiàn)在想要知道出現(xiàn)問(wèn)題時(shí),代碼走的是哪一個(gè)分支。

配合crash進(jìn)行分析,先導(dǎo)入模塊符號(hào)表:

使用crash 查看出問(wèn)題時(shí)結(jié)構(gòu)體的值,確認(rèn)函數(shù)走的是哪個(gè)分支。函數(shù)的參數(shù)是x19:


從打印的之來(lái)看,head成員的值為10, 可以確定代碼走的是哪一個(gè)分支。

再結(jié)合之前的反匯編代碼, 出錯(cuò)的位置在pc: panic_foo +0x54。pc保存的是棧頂指針,lr保存的是函數(shù)返回的地址(x30)

偏移54的位置是把w0的值保存到x21, 而x21的地址是0。w0的值是mov w0, 0xffff直接賦值得來(lái)的。所以這里是將0xffff直接寫(xiě)到0地址導(dǎo)致的問(wèn)題。

綜上如上信息,結(jié)合實(shí)際的代碼,最終找到問(wèn)題的原因。


原文作者:人人都是極客





一文教你用Kdump分析內(nèi)核崩潰原因(實(shí)例演示 ~)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
女性| 武夷山市| 大丰市| 临沭县| 寿光市| 七台河市| 防城港市| 罗甸县| 阿瓦提县| 上虞市| 巫山县| 剑阁县| 万载县| 冷水江市| 万安县| 竹山县| 南通市| 马鞍山市| 漳州市| 资溪县| 襄樊市| 江山市| 五河县| 兰溪市| 阳谷县| 景东| 繁昌县| 房产| 长沙市| 图片| 汽车| 光山县| 三江| 洛宁县| 定兴县| 鹿邑县| 贵德县| 庆安县| 班玛县| 武胜县| 格尔木市|