Linux内核调试:指令追踪大法
2. 调试方法
2.1.反编译vmlinux
mips-linux-gnu-objdump-dvmlinux>dump.s2.2. 打开dump.s,找到你要找的epc值
802cb3b4:8e020004lwv0,4(s0)802cb3b8:24420800addiuv0,v0,2048802cb3bc:ac620000swv0,0(v1)#这里是异常802cb3c0:0000000fsync802cb3c4:8e050588lwa1,1416(s0)802cb3c8:3c04804dluia0,0x804d.3. 向上找找这行指令在哪个函数?
802cb298 :802cb298: 27bdffe0 addiu sp,sp,-32802cb29c: 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文件
touchdrivers/usb/dwc2/gadget.c这步是为了摸一下它,好让此文件在不改动的情况下重新编译一次,这样做的目的是,获取详细反汇编信息。
(资料图片)
2.6. make V=1,取此文件的编译命令
makeuImageV=1-j16>aaa.txt打开 aaa,txt
2.7.单独编译此文件
在命令行粘贴此命令(一个字符都不能少),后面加上(空格)--save-temps -g,回车,发现当前路径下多了俩文件:gadget.i gadget.s。前者是预编译文件,后者也是我们需要的——汇编文件
2.8.打开.s文件找到之前要找的的点
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_offset32sw$17,24($sp)sw$16,20($sp)sw$31,28($sp).cfi_offset17,-8.cfi_offset16,-12.cfi_offset31,-4.loc133370move$17,$5.loc133420lw$5,1348($4)802cb298:802cb298:27bdffe0addiusp,sp,-32802cb29c:afb10018sws1,24(sp)#是否发现这两处的指令是对应的?这时当然的。之后就可以寻找**0x802cb3bc** 这个点在gadget.s中的位置,切记,前后一定要严格对应,要不就找错了,如,在dump.s中,这点在这:...802cb398:8e050588lwa1,1416(s0)802cb39c:3c04804dluia0,0x804d802cb3a0:0c02958bjal800a562c802cb3a4:2484f41caddiua0,a0,-3044802cb3a8:8e020588lwv0,1416(s0)802cb3ac:10400009beqzv0,802cb3d4 802cb3b0:3c030080luiv1,0x80802cb3b4:8e020004lwv0,4(s0)802cb3b8:24420800addiuv0,v0,2048802cb3bc:ac620000swv0,0(v1)//真正的异常802cb3c0:0000000fsync802cb3c4:8e050588lwa1,1416(s0)802cb3c8:3c04804dluia0,0x804d802cb3cc:0c02958bjal800a562c
对应gadget.s 异常如下:
#NO_APP$LBE2718=..loc133940lw$5,1416($16)lui$4,%hi($LC40).setnoreorder.setnomacrojalprintkaddiu$4,$4,%lo($LC40).setmacro.setreorder$LVL843=..loc133950lw$2,1416($16).setnoreorder.setnomacrobeq$2,$0,$L982li$3,8388608#0x800000.setmacro.setreorder.loc133960lw$2,4($16)addiu$2,$2,2048$LBB2722=.$LBB2723=.$LBB2724=.$LBB2725=..loc24290sw$2,0($3)//epc0x0x802cb3bc异常快速找到它的秘诀是,看到 sw v0,0(v1),就搜sw 3),然后再看看上下指令是否对应。找到这处,做个标记。
寄存器辅助记忆:
2.9. 找到c文件中的对应地方
$LBB2722=.$LBB2723=.$LBB2724=.$LBB2725=..loc24290sw$2,0($3)//epc0x0x802cb3bc异常$L1008:$LBE2725=.$LBE2724=.$LBE2723=.$LBE2722=.$LBB2726=.$LBB2727=..loc3790注意他前面的.loc 2 429 0,这就是他的藏身所在。
.file2"./arch/mips/include/asm/io.h".file3"drivers/usb/dwc2/core.h"dwc2_hsotg_core_init_disconnected//drivers/usb/dwc2/gadget.cdwc2_writel(hsotg->regs+DCFG,DCFG_DESCDMA_EN);__raw_writel(value,addr);//drivers/usb/dwc2/core.h+79可以看作最后出错的指令 sw v0,0(v1), 结合代码大致定位到操作DCFG 寄存器出错。
对于硬件寄存器,尽量按位操作,也就是只操作特定比特位,否则会引入未知风险
3. 总结
对于发生异常的函数名定位,有的时候根据经验可以直接通过内核trace dump 信息找到。或者根据epc 直接在 system.map 也可以定位。
对于内核反汇编和重新编译异常文件,依赖于读者对汇编指令的理解。特别是对比 dump.s 和 gadget.s ,如果快速定位和找对很关键。
关键词:
-
Linux内核调试:指令追踪大法
2023-07-28 -
CEC国际公布2023财年年度权益分配方案
2023-07-28 -
住建部发声 提到认房不用认贷 基本情况讲解
2023-07-28 -
蚌埠港上半年货物吞吐量增长百分之十四
2023-07-28 -
大运会开幕式直播平台汇总(持续更新)
2023-07-28 -
李连杰文章一起演的电影_李连杰文章
2023-07-28 -
“提醒”不等于“冒犯”,苏小懒别偷换概念
2023-07-28 -
阜阳90后父母带娃骑车去内蒙古 17天骑行近两千公里
2023-07-28 -
推动改革举措尽快落地 增强A股吸引力
2023-07-28 -
科陆电子07月27日被深股通减持153.88万股
2023-07-28 -
从一条街蝶变看江宁社会治理升级
2023-07-28 -
三国之一城之主官网在哪下载 最新官方下载安装地址
2023-07-28 -
福建能源监管办持续加强告知承诺制事后监管
2023-07-28 -
万字长文:浅谈“产品思维”于工作、于生活
2023-07-28 -
深圳十大最好的国际学校(深圳国际交流学院入学条件)
2023-07-28 -
引才下乡 山东济宁深耕“乡村振兴合伙人”新模式
2023-07-27 -
旺达与巨像pc能玩吗(旺达与巨像登陆PC有可能吗)
2023-07-27 -
孙子兵法/国学经典少儿读本(关于孙子兵法/国学经典少儿读本简述)
2023-07-27 -
2023年徐州伏羊节举办时间+地点(附活动内容)
2023-07-27 -
剑与远征微氪占星怎么样?微氪玩家占星神魔攻略
2023-07-27 -
科普图解 | 备受瞩目!朱雀二号遥二运载火箭发射成功
2023-07-27 -
三星重工与浦项制铁签订LNG船液货舱用不锈钢5年供货合同
2023-07-27 -
河北保定:实施高校毕业生等青年就业服务攻坚行动
2023-07-27 -
萧山机场:20.00亿元超短期融资券获准注册
2023-07-27 -
北自科技关联交易数据存矛盾,同业竞争或致关联方上市遇阻
2023-07-27 -
国家统计局:2023年1—6月份全国规模以上工业企业利润下降16.8% 降幅持续收窄
2023-07-27 -
智能居家运动:AEKE轻力量体系引领新时尚生活
2023-07-27 -
中国纺织新材料高质量发展大会在吉林市举行
2023-07-27 -
破发股前沿生物连连亏 上市即巅峰募18亿瑞银证券保荐
2023-07-27 -
各省经济倒数第一地州市区划调整促经济发展研究:应合并小地级市
2023-07-27
-
守住网络直播的伦理底线
2021-12-16 -
石窟寺文化需要基于保护的“新开发”
2021-12-16 -
电影工作者不能远离生活
2021-12-16 -
提升隧道安全管控能力 智慧高速让司乘安心
2021-12-16 -
人民财评:提升消费体验,服务同样重要
2021-12-16 -
卫冕?突破?旗手?——武大靖留给北京冬奥会三大悬念
2021-12-16 -
新能源车险专属条款出台“三电”系统、起火燃烧等都可保
2021-12-16 -
美术作品中的党史 | 第97集《窗外》
2021-12-16 -
基金销售业务违规!浦发银行厦门分行等被厦门证监局责令改正
2021-12-16 -
保持稳定发展有支撑——从11月“成绩单”看中国经济走势
2021-12-16