首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行‘`emms`’MMX指令时总线错误

执行‘`emms`’MMX指令时总线错误
EN

Stack Overflow用户
提问于 2015-09-22 12:38:00
回答 1查看 97关注 0票数 3

我正在开发一个带有内联程序集的软件端口,因为我们从X32下的Debian维护者那里获取了一些bug报告。在X86和X64下,代码都很好。

我们在emms指令上捕捉到一个总线错误:

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

根据手册,提出了下列例外情况:

代码语言:javascript
复制
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状态寄存器中使用的掩码:

代码语言:javascript
复制
mxcsr    0x1f80    [ IM DM ZM OM UM PM ]

我不相信我可以访问控制寄存器来确定到底是什么导致了异常,所以我很难找到造成总线错误的原因。

造成总线错误的一些潜在原因是什么?不然我怎么能把这个射得更远?

这是info float

代码语言:javascript
复制
(gdb) info float
  R7: Empty   0xffffffffffffffffffff
  R6: Empty   0xffffa5a5a5a5a5a5a5a5
  R5: Empty   0xfffffedcba9876543210
  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

代码语言:javascript
复制
(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状态寄存器位的突破:

代码语言:javascript
复制
  IM - Invalid Operation Mask
  DM - Denormalized Mask
  ZM - Divide By Zero Mask
  OM - Overflow Mask
  UM - Underflow Mask
  PM - Precision Mask
EN

回答 1

Stack Overflow用户

发布于 2015-09-23 07:38:49

EMMS执行时没有问题,如箭头和rip的值所示,故障与以下pop有关,因为rsp指向无效内存。rsp的正确值小于0x100000000。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32717089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档