《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子
生活随笔
收集整理的這篇文章主要介紹了
《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 %ebp0x08048611 <+1>: mov %esp,%ebp0x08048613 <+3>: sub $0x28,%esp0x08048616 <+6>: movl $0x0,-0xc(%ebp)0x0804861d <+13>: jmp 0x804869b <_ZN22xuzhina_dump_c06_s2_ex5printEv+139>0x0804861f <+15>: mov 0x8(%ebp),%eax0x08048622 <+18>: movzwl (%eax),%eax0x08048625 <+21>: cwtl 0x08048626 <+22>: test %eax,%eax0x08048628 <+24>: je 0x8048631 <_ZN22xuzhina_dump_c06_s2_ex5printEv+33>0x0804862a <+26>: cmp $0x1,%eax0x0804862d <+29>: je 0x8048654 <_ZN22xuzhina_dump_c06_s2_ex5printEv+68>0x0804862f <+31>: jmp 0x8048676 <_ZN22xuzhina_dump_c06_s2_ex5printEv+102>0x08048631 <+33>: mov 0x8(%ebp),%eax0x08048634 <+36>: mov 0x14(%eax),%edx0x08048637 <+39>: mov -0xc(%ebp),%eax0x0804863a <+42>: add %edx,%eax => 0x0804863c <+44>: movzbl (%eax),%eax0x0804863f <+47>: movsbl %al,%eax0x08048642 <+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),%eax0x08048657 <+71>: mov 0x14(%eax),%eax0x0804865a <+74>: mov -0xc(%ebp),%edx0x0804865d <+77>: shl $0x2,%edx0x08048660 <+80>: add %edx,%eax0x08048662 <+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),%eax0x08048679 <+105>: mov 0x14(%eax),%eax0x0804867c <+108>: mov -0xc(%ebp),%edx0x0804867f <+111>: shl $0x2,%edx0x08048682 <+114>: add %edx,%eax0x08048684 <+116>: mov (%eax),%eax0x08048686 <+118>: mov %eax,0x4(%esp)0x0804868a <+122>: movl $0x80487cc,(%esp)0x08048691 <+129>: call 0x80484a0 <printf@plt>0x08048696 <+134>: nop0x08048697 <+135>: addl $0x1,-0xc(%ebp)0x0804869b <+139>: mov 0x8(%ebp),%eax0x0804869e <+142>: mov 0x18(%eax),%eax0x080486a1 <+145>: cmp -0xc(%ebp),%eax0x080486a4 <+148>: seta %al0x080486a7 <+151>: test %al,%al0x080486a9 <+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
?
?
?
總結
以上是生活随笔為你收集整理的《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ^好吃懒做^(摘自贝太厨房的小书里的菜谱
- 下一篇: 一个生动的例子让你理解Linux的She