《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子

在探究完类成员变量分布后,来定位一个coredump例子来实践一把:

 

(gdb) bt
#0  0x0804863c in xuzhina_dump_c06_s2_ex::print() ()
#1  0x08048713 in main ()

 

 

 

看一下xuzhina_dump_c06_s2_ex::print的汇编:

(gdb) disassemble 0x0804863c                   
Dump of assembler code for function _ZN22xuzhina_dump_c06_s2_ex5printEv:
   0x08048610 <+0>:     push   %ebp
   0x08048611 <+1>:     mov    %esp,%ebp
   0x08048613 <+3>:     sub    $0x28,%esp
   0x08048616 <+6>:     movl   $0x0,-0xc(%ebp)
   0x0804861d <+13>:    jmp 0x804869b <_ZN22xuzhina_dump_c06_s2_ex5printEv+139>
   0x0804861f <+15>:    mov    0x8(%ebp),%eax
   0x08048622 <+18>:    movzwl (%eax),%eax
   0x08048625 <+21>:    cwtl   
   0x08048626 <+22>:    test   %eax,%eax
   0x08048628 <+24>:    je     0x8048631 <_ZN22xuzhina_dump_c06_s2_ex5printEv+33>
   0x0804862a <+26>:    cmp    $0x1,%eax
   0x0804862d <+29>:    je     0x8048654 <_ZN22xuzhina_dump_c06_s2_ex5printEv+68>
   0x0804862f <+31>:    jmp 0x8048676 <_ZN22xuzhina_dump_c06_s2_ex5printEv+102>
   0x08048631 <+33>:    mov    0x8(%ebp),%eax
   0x08048634 <+36>:    mov    0x14(%eax),%edx
   0x08048637 <+39>:    mov    -0xc(%ebp),%eax
   0x0804863a <+42>:    add    %edx,%eax
=> 0x0804863c <+44>:    movzbl (%eax),%eax
   0x0804863f <+47>:    movsbl %al,%eax
   0x08048642 <+50>:    mov    %eax,0x4(%esp)
   0x08048646 <+54>:    movl   $0x80487c4,(%esp)
   0x0804864d <+61>:    call   0x80484a0 <printf@plt>
   0x08048652 <+66>:    jmp 0x8048697 <_ZN22xuzhina_dump_c06_s2_ex5printEv+135>
   0x08048654 <+68>:    mov    0x8(%ebp),%eax
   0x08048657 <+71>:    mov    0x14(%eax),%eax
   0x0804865a <+74>:    mov    -0xc(%ebp),%edx
   0x0804865d <+77>:    shl    $0x2,%edx
   0x08048660 <+80>:    add    %edx,%eax
   0x08048662 <+82>:    flds   (%eax)
   0x08048664 <+84>:    fstpl  0x4(%esp)
   0x08048668 <+88>:    movl   $0x80487c8,(%esp)
   0x0804866f <+95>:    call   0x80484a0 <printf@plt>
   0x08048674 <+100>:   jmp 0x8048697 <_ZN22xuzhina_dump_c06_s2_ex5printEv+135>
   0x08048676 <+102>:   mov    0x8(%ebp),%eax
   0x08048679 <+105>:   mov    0x14(%eax),%eax
   0x0804867c <+108>:   mov    -0xc(%ebp),%edx
   0x0804867f <+111>:   shl    $0x2,%edx
   0x08048682 <+114>:   add    %edx,%eax
   0x08048684 <+116>:   mov    (%eax),%eax
   0x08048686 <+118>:   mov    %eax,0x4(%esp)
   0x0804868a <+122>:   movl   $0x80487cc,(%esp)
   0x08048691 <+129>:   call   0x80484a0 <printf@plt>
   0x08048696 <+134>:   nop
   0x08048697 <+135>:   addl   $0x1,-0xc(%ebp)
   0x0804869b <+139>:   mov    0x8(%ebp),%eax
   0x0804869e <+142>:   mov    0x18(%eax),%eax
   0x080486a1 <+145>:   cmp    -0xc(%ebp),%eax
   0x080486a4 <+148>:   seta   %al
   0x080486a7 <+151>:   test   %al,%al
   0x080486a9 <+153>:   jne    0x804861f <_ZN22xuzhina_dump_c06_s2_ex5printEv+15>
   0x080486af <+159>:   leave  
   0x080486b0 <+160>:   ret    
End of assembler dump.

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值