『coredump問題原理探究』Linux 86版7.12節string coredump
1742 ワード
coredumpを見てみましょう
ちょっと見てstrlen_sse2_bsfのアセンブリ:
レジスタの値を見てみましょう.
詳細については、微信の公式アカウント「debugeeker」に注目してください.リンクはhttps://mp.weixin.qq.com/s/VV7nI1wkaM4uXnihUPvc6w
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, std::allocator >::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 : push %esi
0x0090baf1 : push %edi
0x0090baf2 : mov 0xc(%esp),%edi
0x0090baf6 : xor %eax,%eax
0x0090baf8 : mov %edi,%ecx
0x0090bafa : and $0x3f,%ecx
0x0090bafd : pxor %xmm0,%xmm0
0x0090bb01 : cmp $0x30,%ecx
0x0090bb04 : ja 0x90bb1d <__strlen_sse2_bsf>
=> 0x0090bb06 : movdqu (%edi),%xmm1
0x0090bb0a : pcmpeqb %xmm1,%xmm0
0x0090bb0e : pmovmskb %xmm0,%edx
0x0090bb12 : test %edx,%edx
0x0090bb14 : jne 0x90bb89 <__strlen_sse2_bsf>
0x0090bb16 : mov %edi,%eax
0x0090bb18 : and $0xfffffff0,%eax
0x0090bb1b : jmp 0x90bb37 <__strlen_sse2_bsf>
0x0090bb1d : 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