我有一个核心转储堆栈已损坏。
我试着拆开它,发现下面的plz可以帮助我分析它。。

(gdb) bt
#0  0x55a63c98 in ?? ()
#1  0x00000000 in ?? ()

(gdb) disassemble 0x55a63c90 0x55a63ca8

Dump of assembler code from 0x55a63c90 to 0x55a63ca8:

0x55a63c90:     add    %cl,%dh

0x55a63c92:     cmpsb  %es:(%edi),%ds:(%esi)

0x55a63c93:     push   %ebp

0x55a63c94:     add    %al,(%eax)

0x55a63c96:     add    %al,(%eax)

**0x55a63c98:     pusha**

0x55a63c99:     lret   $0x9

0x55a63c9c:     subb   $0x56,0xd005598(%ebp)

0x55a63ca3:     push   %ebp

0x55a63ca4:     jo     0x55a63cc5

0x55a63ca6:     sahf

0x55a63ca7:     push   %ebp

End of assembler dump.
(gdb) q

这个pusha指令可以导致核心转储吗?

最佳答案

不*,pusha所做的就是将所有通用寄存器推送到堆栈,包括堆栈指针导致核心转储的是pusha,lret之后的指令,这是一个长时间的堆栈弹出返回返回地址是推送到堆栈的最新值,在本例中是esi:edi中的任何值(因为它们是pusha指令最后一个推送到堆栈的值),而且很可能指向随机的某个地方。
*除非你的堆栈空间用完了。

08-07 03:30