我是靠谱客的博主 寂寞手机,最近开发中收集的这篇文章主要介绍《coredump问题原理探究》Linux x86版7.12节string coredump,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

看一个coredump:

Program terminated with signal 11, Segmentation fault.
#0
0x0090bb06 in __strlen_sse2_bsf () from /lib/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.149.el6_6.5.i686 libgcc-4.4.7-11.el6.i686 libstdc++-4.4.7-11.el6.i686
(gdb) bt
#0
0x0090bb06 in __strlen_sse2_bsf () from /lib/libc.so.6
#1
0x00cd88b3 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(char const*) () from /usr/lib/libstdc++.so.6
#2
0x080485b7 in main ()

看一下__strlen_sse2_bsf的汇编:


(gdb) frame 0
#0
0x0090bb06 in __strlen_sse2_bsf () from /lib/libc.so.6
(gdb) disassemble
Dump of assembler code for function __strlen_sse2_bsf:
0x0090baf0 <+0>:
push
%esi
0x0090baf1 <+1>:
push
%edi
0x0090baf2 <+2>:
mov
0xc(%esp),%edi
0x0090baf6 <+6>:
xor
%eax,%eax
0x0090baf8 <+8>:
mov
%edi,%ecx
0x0090bafa <+10>:
and
$0x3f,%ecx
0x0090bafd <+13>:
pxor
%xmm0,%xmm0
0x0090bb01 <+17>:
cmp
$0x30,%ecx
0x0090bb04 <+20>:
ja
0x90bb1d <__strlen_sse2_bsf+45>
=> 0x0090bb06 <+22>:
movdqu (%edi),%xmm1
0x0090bb0a <+26>:
pcmpeqb %xmm1,%xmm0
0x0090bb0e <+30>:
pmovmskb %xmm0,%edx
0x0090bb12 <+34>:
test
%edx,%edx
0x0090bb14 <+36>:
jne
0x90bb89 <__strlen_sse2_bsf+153>
0x0090bb16 <+38>:
mov
%edi,%eax
0x0090bb18 <+40>:
and
$0xfffffff0,%eax
0x0090bb1b <+43>:
jmp
0x90bb37 <__strlen_sse2_bsf+71>
0x0090bb1d <+45>:
mov
%edi,%eax

看一下寄存器的值:


(gdb) i r edi
edi
0x0
0
(gdb) i r ecx
ecx
0x0
0

更多内容 请关注微信公众号“debugeeker", 链接为https://mp.weixin.qq.com/s/VV7nI1wkaM4uXnihUPvc6w

最后

以上就是寂寞手机为你收集整理的《coredump问题原理探究》Linux x86版7.12节string coredump的全部内容,希望文章能够帮你解决《coredump问题原理探究》Linux x86版7.12节string coredump所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部