我有一個堆棧損壞的核心轉儲。 我嘗試拆解,發現如下PLZ幫我anaylyse吧..pusha彙編語言指令
(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指令可能導致核心轉儲?
有什麼辦法可以驗證堆棧溢出嗎? – Arpit
@Arpit:它取決於,在保護模式下,你會得到#SS(0)CPU異常。除此之外,您可能會遇到#PF(x)異常。但是這些會被操作系統所捕獲。 nobugz提出了最可能的原因:代碼跳到了隨機位的內存。您可以通過取消引用無效指針來完成此操作,通常通過在尚未初始化的對象上調用虛擬方法來實現。 – Skizz