XSAVE在VS 2017中导致未处理的异常

时间:2017-07-08 23:22:54

标签: assembly x86

此代码在Intel 4770K(支持AVX2和XSAVE设置)上运行。环境是MASM(在VS 2017中)。

and  rsp,-40H     ; aligns stack to 64 byte
sub  rsp,2000H    ; creates enough space to write out the XSAVE
mov  qword ptr xsave_space_ptr, rsp
xor  rcx,rcx      ; XCR(0)
xgetbv            ; returns RAX:7,RDX:0
mov  rax,7
mov  rdx,0
xsave  qword ptr xsave_space_ptr ; this is where the VS 2017 crashes.

欢迎任何关于此用法不正确的建议。如果EDX:EAX中的所有位都设置为1,它也会失败。

1 个答案:

答案 0 :(得分:6)

xsave  qword ptr xsave_space_ptr

xsave_space_ptr中包含的值无关,您xsave所在的位置是xsave_space_ptr本身。 xsave(就像写入内存的任何典型指令一样)写入给定的地址,它不会从给定的地址读取指针,然后写入指针指向的任何地方,这段代码似乎是假设。因此,它写入此处的地址可能不会是64对齐的(为什么会这样,除了巧合)会导致异常。看起来你打算这样做:

xsave [rsp]