根据mips寄存器的用途迅速定位问题
来源:互联网 发布:linux 分页 编辑:程序博客网 时间:2024/05/20 22:35
在遇上一些偶尔才能出现的bug的时候, 根据寄存器的相关信息结合汇编语句, 可以迅速定位到问题, 提高debug的效率.
正好今天项目上报了一个bug, 死机的, 用这个方法很快定位到问题.
死机的一些打印:
#AP!# exception!Coprocessor Unusable exception
EPC[0x80240760], CAUSE[0x1080002c], SR[0xff03], SP[0x80c0b558]!
showcs 80240760 80c0b558 80103510
OSIntNesting=0 OSLockNesting=0
先看寄存器:
ra:[0x8010351] epc[0x80240760] fp:[0x80034e70] gp:[0x80618b48] at:[0xfffffffe]
t9:[0x8001306] t8:[0x00000008] t7:[0x00000000] t6:[0x00000005] t5:[0x00000000]
t4:[0x816baff] t3:[0x00000000] t2:[0x00000000] t1:[0x80fbd330] t0:[0x806f0000]
s7:[0x8023f55] s6:[0x80034ed0] s5:[0x80c0c27c] s4:[0x8111fdb0] s3:[0x80c0be28]
s2:[0x0000000] s1:[0x80c0b6c4] s0:[0x800341f0]
a3:[0x80c0b4c] a2:[0x000000fe] a1:[0x80c0b588] a0:[0x00000000]
v1:[0x8024075] v0:[0x000000fe]
注意这边的a0寄存器.
相应的汇编:
80240758 <xxxx_func>:
80240758: 27bdffe8 addiu sp,sp,-24
8024075c: afbf0014 sw ra,20(sp)
80240760: 90830204 lbu v1,516(a0) //这边有问题
80240764: 3c0280ab lui v0,0x80ab
80240768: 2442b778 addiu v0,v0,-18568
8024076c: 00033180 sll a2,v1,0x6
80240770: 00031900 sll v1,v1,0x4
由于a0一般用来做参数传递, 所以检查这个函数的参数的定义.
typedef struct
{
void *dir;
tchar_t name[256];
u8 use_logic; //正好是516的偏移
u32 file_num;
}xxx;
结合函数中的语句, 有p_dj->use_logic的操作, 因此这个死机是由于传递的这个参数是NULL导致的.
==============================下面是网上找的mips寄存器的介绍================================
表格来自 http://blog.sina.com.cn/s/blog_6cf6b58d0100lot7.html
;REGISTER
NAME
USAGE
$0
$zero
常量0(constant value 0)
$1
$at
保留给汇编器(Reserved for assembler)
$2-$3
$v0-$v1
函数调用返回值(values for results and expressionevaluation)
$4-$7
$a0-$a3
函数调用参数(arguments)
$8-$15
$t0-$t7
暂时的(或随便用的)
$16-$23
$s0-$s7
保存的(或如果用,需要SAVE/RESTORE的)(saved)
$24-$25
$t8-$t9
暂时的(或随便用的)
$28
$gp
全局指针(Global Pointer)
$29
$sp
堆栈指针(Stack Pointer)
$30
$fp
帧指针(Frame Pointer)
$31
$ra
返回地址(return address)
- 根据mips寄存器的用途迅速定位问题
- MIPS 的寄存器
- mips的32个寄存器
- mips的32个寄存器
- mips的32个寄存器
- mips寄存器
- mips寄存器
- MIPS寄存器
- mips寄存器
- MIPS的32个通用寄存器
- 寄存器用途
- SI和DI寄存器的用途
- SI和DI寄存器的用途
- 六个通用寄存器的特定用途
- 如何通过solaris自带的命令,迅速定位模块问题
- MIPS寄存器约定
- MIPS寄存器约定
- MIPS 寄存器约定
- mac系统命令
- cxf 开发webservice 需要的jar
- java环境下:MongoDB的crud操作之Update (三)
- IOS 7 手势滑动返回的问题
- 执行文件的renameTo失败
- 根据mips寄存器的用途迅速定位问题
- argc和argv
- CentOS6.4 单网卡部署PPTP VPN服务器
- 继承于UIView,设置其中一个或多个角为圆角
- LeetCode算法题之Palindrome Number
- vmlinuz、initrd.img、vmlinuz
- Web_PHP_DedeCMS_表单验证模块;
- java对存储过程的调用
- ora-00600:内部错误代码,参数:[kcratr1_lastbwr],[],[],[],[],[],[],[]