2015-09-22 52 views
3

由於我們在X32之下從Debian維護人員那裏收到了一些錯誤報告,因此我正在使用內聯彙編來處理某些軟件的端口。在X86和X64下的代碼都很好。執行`emms` MMX指令時發生總線錯誤

我們在emms指令捕捉總線錯誤:

... 
    0x005520fd <+3885>: pop %rsp 
    0x005520fe <+3886>: emms 
=> 0x00552100 <+3888>: pop %rbx 
    0x00552101 <+3889>: jmpq 0x5519e3 
    0x00552106 <+3894>: nopw %cs:0x0(%rax,%rax,1) 
    ... 

根據手冊,但下列情況除外復活:

Exceptions: 

    RM PM VM SMM Description 
    #UD #UD #UD #UD If CR0.EM = 1 
    #NM #NM #NM #NM If CR0.TS = 1 
    #MF #MF #MF #MF If pending FPU Exception 

這裏是在MMX狀態中使用的面具註冊:

mxcsr 0x1f80 [ IM DM ZM OM UM PM ] 

我不相信我有權訪問控制註冊以確定實際導致異常的原因,所以我無法找到總線錯誤的原因。

總線錯誤的一些潛在原因是什麼?或者我該如何解決這個問題呢?


這裏的info float

(gdb) info float 
    R7: Empty 0xffffffffffffffffffff 
    R6: Empty 0xffffa5a5a5a5a5a5a5a5 
    R5: Empty 0xfffffedcba
    R4: Empty 0xffffb182db48cf349120 
    R3: Empty 0xffff926cd0b6a839b535 
    R2: Empty 0xfffff373de2d49584e7a 
    R1: Empty 0xffff16166e76b1bb925f 
=>R0: Empty 0xffff24f0130c63ac9332 

Status Word:   0x0000            
         TOP: 0 
Control Word:  0x037f IM DM ZM OM UM PM 
         PC: Extended Precision (64-bits) 
         RC: Round to nearest 
Tag Word:   0xffff 
Instruction Pointer: 0x00:0x00000000 
Operand Pointer:  0x00:0x00000000 
Opcode:    0x0000 

這裏從info registers是:

(gdb) info registers 
rax   0xffffcb58 0xffffcb58 
rbx   0x30 0x30 
rcx   0x14f3 0x14f3 
rdx   0x61d560 0x61d560 
rsi   0xffffcb08 0xffffcb08 
rdi   0x14 0x14 
rbp   0xffffcb58 0xffffcb58 
rsp   0xb62f7cbfffffc8d8 0xb62f7cbfffffc8d8 
r8    0x0 0x0 
r9    0x40 0x40 
r10   0x2e676e696e6e7572 0x2e676e696e6e7572 
r11   0x246 0x246 
r12   0x9028a0 0x9028a0 
r13   0xffffcaf0 0xffffcaf0 
r14   0x8f6120 0x8f6120 
r15   0xffffca6c 0xffffca6c 
rip   0x552100 0x552100 
eflags   0x10246 [ PF ZF IF RF ] 
cs    0x33 0x33 
ss    0x2b 0x2b 
ds    0x2b 0x2b 
es    0x2b 0x2b 
fs    0x63 0x63 
gs    0x0 0x0 

這裏的MMX狀態寄存器位的突破:

IM - Invalid Operation Mask 
    DM - Denormalized Mask 
    ZM - Divide By Zero Mask 
    OM - Overflow Mask 
    UM - Underflow Mask 
    PM - Precision Mask 
+0

您能否包含與此生成代碼塊相對應的源代碼部分,以便我們可以看到正在使用哪些內部函數等? –

回答

0

EMMS正在執行沒有問題,如箭頭所示,並且值rip故障與以下pop因爲rsp指向無效內存。 rsp的正確值小於0x100000000。

相關問題