Linux系统日志segment分析

来源:互联网 发布:备份短信的软件 编辑:程序博客网 时间:2024/05/29 19:47

Linux系统日志下segment fault

1.    系统日志分析——得出大概的错误类型:

Linux下载下来的系统日志:

192.168.196.155               Dec 1 15:11:00 adapi196155 kernel: ad_calc_server[9341]: segfault at 00002a00cfbf1e80rip 0000003ad10b7672 rsp 00002aad4cf1ceb8 error 6

192.168.197.155               Dec 1 16:13:57 adapi197155 kernel: ad_calc_server[29351]: segfault at00002a00643d1c40 rip 0000000000629fd5rsp 00002aad0dd73f70 error 4

 

依据右面的错误码:

error number是由三个字位组成的,从高到底分别为bit2 bit1bit0,所以它的取值范围是0~7.

·         bit2: 值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界

·         bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界

·         bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址

 

可以看到:

6——表示用户态程序内存访问越界,同时写操作导致内存访问越界

4——表示用户态程序内存访问越界

 

2.    0000000000629fd5这个表示堆栈里面的编号,利用

readelf -s a.out > temp可以查看符号表,就能找到对应的函数了。
objdump -d a.out > a.s
可以反汇编,不但能找到函数,还能直接定位到指令

将计算模块的可执行程序进行反汇编:

*.s中找到:629fd5:      48 8b 4010            mov    0x10(%rax),%rax

它属于这个段的:

0000000000629f96 <_ZNSt3tr19hashtableISsSt4pairIKSsSsESaIS3_EN8Internal10extract1stIS3_EESt8equal_toISsENS_4hashISsEENS5_17mod_range_hashingENS5_19default_ranged_hashENS5_19prime_rehash_policyELb0ELb0ELb1EE18m_deallocate_nodesEPPNS5_9hash_nodeIS3_Lb0EEEm>:

在符号表temp文件中找到:

4562: 0000000000629f96   127FUNC    WEAK   DEFAULT   12 _ZNSt3tr19hashtableISsSt4

可以看出可能是hashtable出了问题?

原创粉丝点击