在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核調(diào)試:指令追蹤大法簡析

Dp1040 ? 來源:漫談嵌入式 ? 2023-08-02 09:05 ? 次閱讀

1. 錯誤異常

7a4c219e-30cc-11ee-9e74-dac502259ad0.png

epc : 0x802cb3bc

ra : 0x802cb3a8

2. 調(diào)試方法

2.1.反編譯vmlinux

mips-linux-gnu-objdump-d vmlinux>dump.s

2.2. 打開dump.s,找到你要找的epc值

802cb3b4:8e020004lwv0,4(s0)
802cb3b8:24420800addiuv0,v0,2048
802cb3bc:ac620000swv0,0(v1)#這里是異常
802cb3c0:0000000fsync
802cb3c4:8e050588lwa1,1416(s0)
802cb3c8:3c04804dluia0,0x804d

.3. 向上找找這行指令在哪個函數(shù)?

802cb298 :
802cb298:    27bdffe0    addiu  sp,sp,-32
802cb29c:    afb10018    sw   s1,24(sp)
802cb2a0:    afb00014    sw   s0,20(sp)
802cb2a4:    afbf001c    sw   ra,28(sp)

2.4.找到它在哪個文件

接口位于:drivers/usb/dwc2/gadget.c

2.5. touch一下這個c文件

touch drivers/usb/dwc2/gadget.c

這步是為了摸一下它,好讓此文件在不改動的情況下重新編譯一次,這樣做的目的是,獲取詳細(xì)反匯編信息。

2.6. make V=1,取此文件的編譯命令

make uImage V=1-j16>aaa.txt

打開 aaa,txt

7aa7ece0-30cc-11ee-9e74-dac502259ad0.png

2.7.單獨(dú)編譯此文件

在命令行粘貼此命令(一個字符都不能少),后面加上(空格)--save-temps -g,回車,發(fā)現(xiàn)當(dāng)前路徑下多了倆文件:gadget.i gadget.s。前者是預(yù)編譯文件,后者也是我們需要的——匯編文件

7ad0d358-30cc-11ee-9e74-dac502259ad0.png

7af66d66-30cc-11ee-9e74-dac502259ad0.png

2.8.打開.s文件找到之前要找的的點(diǎn)

根據(jù)之前定位的函數(shù):dwc2_hsotg_core_init_disconnected

dwc2_hsotg_core_init_disconnected:
.frame$sp,32,$31#vars=0,regs=3/0,args=16,gp=0
.mask0x80030000,-4
.fmask0x00000000,0
$LVL835=.
addiu$sp,$sp,-32
.cfi_def_cfa_offset32
sw$17,24($sp)
sw$16,20($sp)
sw$31,28($sp)
.cfi_offset17,-8
.cfi_offset16,-12
.cfi_offset31,-4
.loc133370
move$17,$5
.loc133420
lw$5,1348($4)

對比內(nèi)核 dump.s

802cb298:
802cb298:27bdffe0addiusp,sp,-32
802cb29c:afb10018sws1,24(sp)

#是否發(fā)現(xiàn)這兩處的指令是對應(yīng)的?這時當(dāng)然的。之后就可以尋找**0x802cb3bc**這個點(diǎn)在gadget.s中的位置,切記,前后一定要嚴(yán)格對應(yīng),要不就找錯了,如,在dump.s中,這點(diǎn)在這:

...
802cb398:8e050588lwa1,1416(s0)
802cb39c:3c04804dluia0,0x804d
802cb3a0:0c02958bjal800a562c
802cb3a4:2484f41caddiua0,a0,-3044
802cb3a8:8e020588lwv0,1416(s0)
802cb3ac:10400009beqzv0,802cb3d4
802cb3b0:3c030080luiv1,0x80
802cb3b4:8e020004lwv0,4(s0)
802cb3b8:24420800addiuv0,v0,2048
802cb3bc:ac620000swv0,0(v1)//真正的異常
802cb3c0:0000000fsync
802cb3c4:8e050588lwa1,1416(s0)
802cb3c8:3c04804dluia0,0x804d
802cb3cc:0c02958bjal800a562c

對應(yīng)gadget.s 異常如下:

#NO_APP
$LBE2718=.
.loc133940
lw$5,1416($16)
lui$4,%hi($LC40)
.setnoreorder
.setnomacro
jal printk
addiu$4,$4,%lo($LC40)
.setmacro
.setreorder

$LVL843=.
.loc133950
lw$2,1416($16)
.setnoreorder
.setnomacro
beq$2,$0,$L982
li$3,8388608#0x800000
.setmacro
.setreorder

.loc133960
lw$2,4($16)
addiu$2,$2,2048
$LBB2722=.
$LBB2723=.
$LBB2724=.
$LBB2725=.
.loc24290
sw$2,0($3)//epc 0x0x802cb3bc異常

快速找到它的秘訣是,看到 sw v0,0(v1),就搜sw3),然后再看看上下指令是否對應(yīng)。找到這處,做個標(biāo)記。

寄存器輔助記憶:

7b0676d4-30cc-11ee-9e74-dac502259ad0.png

2.9. 找到c文件中的對應(yīng)地方

$LBB2722=.
$LBB2723=.
$LBB2724=.
$LBB2725=.
.loc24290
sw$2,0($3)//epc 0x0x802cb3bc異常
$L1008:
$LBE2725=.
$LBE2724=.
$LBE2723=.
$LBE2722=.
$LBB2726=.
$LBB2727=.
.loc3790

注意他前面的.loc 2 429 0,這就是他的藏身所在。

.loc 1 意思是第一個文件,可以從gadget.s中搜索file 1,如

.file 2"./arch/mips/include/asm/io.h"

429:行號 這就是它在的文件。打開它,找到 429

結(jié)合下文的.loc 3 79 0。

.file 3"drivers/usb/dwc2/core.h"

79: 行號 最終位置

dwc2_hsotg_core_init_disconnected//drivers/usb/dwc2/gadget.c
dwc2_writel(hsotg->regs+DCFG,DCFG_DESCDMA_EN);
__raw_writel(value,addr);//drivers/usb/dwc2/core.h+79

可以看作最后出錯的指令sw v0,0(v1), 結(jié)合代碼大致定位到操作DCFG 寄存器出錯。

對于硬件寄存器,盡量按位操作,也就是只操作特定比特位,否則會引入未知風(fēng)險(xiǎn)

3. 總結(jié)

保存錯誤現(xiàn)場(epc/ra地址)

反匯編內(nèi)核:objdump -d vmlinux > dump.s

根據(jù)dump.s 找到指定 epc 值

根據(jù)epc 值 確定發(fā)生異常的函數(shù)

根據(jù)函數(shù)名確定發(fā)生異常的文件

重新編譯發(fā)生異常的文件,得到詳細(xì)匯編和預(yù)處理信息(--save-temps -g

根據(jù)epc 確定異常位置。

根據(jù)異常位置,定位文件名及行號。一般經(jīng)過這幾步就可以精確定位錯誤發(fā)生地方了。

對于發(fā)生異常的函數(shù)名定位,有的時候根據(jù)經(jīng)驗(yàn)可以直接通過內(nèi)核trace dump 信息找到。或者根據(jù)epc 直接在 system.map 也可以定位。

對于內(nèi)核反匯編和重新編譯異常文件,依賴于讀者對匯編指令的理解。特別是對比 dump.s 和 gadget.s ,如果快速定位和找對很關(guān)鍵。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5425

    瀏覽量

    123512
  • EPC
    EPC
    +關(guān)注

    關(guān)注

    1

    文章

    99

    瀏覽量

    30911
  • 匯編語言
    +關(guān)注

    關(guān)注

    14

    文章

    410

    瀏覽量

    36608
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1657

    瀏覽量

    49923
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    317

    瀏覽量

    22227

原文標(biāo)題:Linux內(nèi)核調(diào)試:指令追蹤大法

文章出處:【微信號:玩點(diǎn)嵌入式,微信公眾號:玩點(diǎn)嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux內(nèi)核學(xué)習(xí)筆記:printk調(diào)試

    很多內(nèi)核開發(fā)者喜歡的調(diào)試工具是printk,在Linux內(nèi)核中,使用printk()函數(shù)來打印信息,它與C庫的printf()函數(shù)類似。
    發(fā)表于 06-01 15:14 ?1423次閱讀

    Linux proc文件系統(tǒng)

    linux 操作系統(tǒng)把虛擬地址分為用戶空間和內(nèi)核空間,內(nèi)核空間可以通過procfs把內(nèi)核的數(shù)據(jù)呈現(xiàn)給用戶空間,用戶空間也可以把數(shù)據(jù)寫入到內(nèi)核
    發(fā)表于 06-16 10:32 ?1021次閱讀

    請問linux內(nèi)核怎么調(diào)試

    問個問題,怎么調(diào)試linux內(nèi)核,百度了一下,結(jié)果還是不會使用gdb調(diào)試內(nèi)核。希望大蝦幫忙指點(diǎn)一下。
    發(fā)表于 02-25 07:32

    ST-LINK硬件仿真調(diào)試

    /SWD調(diào)試原理1.1STM32F10xxx使用Cortex?-M3內(nèi)核,該內(nèi)核內(nèi)含硬件調(diào)試
    發(fā)表于 08-11 08:34

    Linux內(nèi)核下板級信息文件

    Linux 內(nèi)核源碼中大量的 arch/arm/mach-xxx 和 arch/arm/plat-xxx 文件夾,這些文件夾里面的文件就是對應(yīng)平臺下的板級信息666隨著智能手機(jī)的發(fā)展,每年新出
    發(fā)表于 12-23 07:48

    Linux內(nèi)核網(wǎng)絡(luò)之網(wǎng)絡(luò)層發(fā)送消息之IP分片

    1、Linux內(nèi)核網(wǎng)絡(luò)之網(wǎng)絡(luò)層發(fā)送消息之IP分片本文分析下ip的分片。行 IP 分片。IP分片通常發(fā)生在網(wǎng)絡(luò)環(huán)境中,比如1個B環(huán)境中的MTU為500B,若的數(shù)據(jù)長度超過
    發(fā)表于 07-20 15:34

    鼠標(biāo)HID例程(中)

    鼠標(biāo) HID 例程 緊接《鼠標(biāo) HID 例程(上)》一文,繼續(xù)向大家介紹鼠 標(biāo) HID 例程的未完的內(nèi)容。
    發(fā)表于 07-26 15:18 ?0次下載

    如何配置和使用Linux內(nèi)核printk功能

    了解如何配置和使用Linux內(nèi)核printk功能,包括其動態(tài)調(diào)試功能。 這樣可以選擇性地打印調(diào)試消息,而無需重新編譯內(nèi)核
    的頭像 發(fā)表于 11-27 06:40 ?3307次閱讀

    學(xué)會Linux內(nèi)核調(diào)試方法!

    內(nèi)核開發(fā)比用戶空間開發(fā)更難的一個因素就是內(nèi)核調(diào)試艱難。內(nèi)核錯誤往往會導(dǎo)致系統(tǒng)宕機(jī),很難保留出錯時的現(xiàn)場。調(diào)試
    發(fā)表于 05-07 11:01 ?2482次閱讀

    Linux:QEMU調(diào)試內(nèi)核的步驟

    Linux:QEMU調(diào)試內(nèi)核的步驟
    的頭像 發(fā)表于 06-23 09:03 ?3366次閱讀
    <b class='flag-5'>Linux</b>:QEMU<b class='flag-5'>調(diào)試</b><b class='flag-5'>內(nèi)核</b>的步驟

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試教程。
    發(fā)表于 11-06 17:32 ?21次下載
    嵌入式<b class='flag-5'>LINUX</b>系統(tǒng)<b class='flag-5'>內(nèi)核</b>和<b class='flag-5'>內(nèi)核</b>模塊<b class='flag-5'>調(diào)試</b>教程

    教你們?nèi)绾问褂胑BPF追蹤LINUX內(nèi)核

    1. 前言 我們可以使用BPF對Linux內(nèi)核進(jìn)行跟蹤,收集我們想要的內(nèi)核數(shù)據(jù),從而對Linux中的程序進(jìn)行分析和調(diào)試。與其它的跟蹤技術(shù)相比
    的頭像 發(fā)表于 04-20 11:26 ?2659次閱讀
    教你們?nèi)绾问褂胑BPF<b class='flag-5'>追蹤</b><b class='flag-5'>LINUX</b><b class='flag-5'>內(nèi)核</b>

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試

    嵌入式LINUX系統(tǒng)內(nèi)核內(nèi)核模塊調(diào)試(嵌入式開發(fā)和硬件開發(fā))-嵌入式LINUX系統(tǒng)內(nèi)核
    發(fā)表于 07-30 13:55 ?10次下載
    嵌入式<b class='flag-5'>LINUX</b>系統(tǒng)<b class='flag-5'>內(nèi)核</b>和<b class='flag-5'>內(nèi)核</b>模塊<b class='flag-5'>調(diào)試</b>

    Linux內(nèi)核調(diào)試方式以及工具總結(jié)

    內(nèi)核總是那么捉摸不透, 內(nèi)核也會犯錯, 但是調(diào)試卻不能像用戶空間程序那樣, 為此內(nèi)核開發(fā)者為我們提供了一系列的工具和系統(tǒng)來支持內(nèi)核
    的頭像 發(fā)表于 05-22 14:37 ?1763次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>調(diào)試</b>方式以及工具總結(jié)

    萬字長文解讀Linux內(nèi)核追蹤機(jī)制

    Linux 存在眾多 tracing tools,比如 ftrace、perf,他們可用于內(nèi)核調(diào)試、提高內(nèi)核的可觀測性。
    的頭像 發(fā)表于 06-11 11:05 ?1092次閱讀
    萬字長文解讀<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>追蹤</b>機(jī)制
    主站蜘蛛池模板: 成人精品视频在线观看播放 | 色五月丁香五月综合五月 | 91大神在线精品网址 | 久色99| 超薄肉色丝袜精品足j福利 超黄视频在线观看 | 久久人人澡 | 毛片网页| 午夜免费 | 国产在线精品观看一区 | 免费观看四虎精品成人 | 美欧毛片 | 亚洲国产婷婷香蕉久久久久久 | 国产又黄又爽又猛的免费视频播放 | 天天操bb| 成人a大片高清在线观看 | 在线观看www妖精免费福利视频 | 黄色一级视频网 | 色黄视频 | 天天做.天天爱.天天综合网 | 五月婷婷深爱五月 | a资源在线观看 | 人人天天爱天天做天天摸 | 成人拍拍视频 | 国产午夜精品理论片在线 | 91三级在线观看 | 亚洲性视频网站 | 欧美日韩色综合网站 | 亚欧人成精品免费观看 | 中文在线免费看影视 | 日韩欧美色图 | 97久久天天综合色天天综合色hd | 日本三级视频在线观看 | 久久福利青草精品资源 | 91在线播放免费不卡无毒 | 亚洲1区2区3区4区 | 美女网战色 | 97国产精品人人爽人人做 | 1024 在线观看视频免费 | 久久88色综合色鬼 | 天天曰天天干 | 久久精品国产精品亚洲人人 |