3

我的汇编代码在调用 xbegin 时引发非法指令。

有什么问题吗?

这是我的代码。

主程序

if ( rtm_begin() == 0 ) {
    //do something.
}

rtm.S

rtm_begin:   
   xbegin 1f   
   mov $0, %rax      
   retq

1:
   mov $-1, %rax
   retq

   .globl rtm_end
   .type rtm_end, @function
   .section .text
4

1 回答 1

3

首先,您需要检查您的汇编器版本是否支持TSX指令。

那么可能是您的 CPU 没有 TSX 功能。根据英特尔® 64 和 IA-32 架构软件开发人员手册,第 16.3.1.2 章 RTM 支持检测

如果 CPUID.07H.EBX.RTM [bit 11] = 1,则处理器支持 RTM 执行。应用程序必须在使用 RTM 指令(XBEGI N、XEND、XABORT)之前检查处理器是否支持 RTM。这些指令在不支持 RTM 的处理器上使用时会产生 #UD 异常。

此外,为了缓解 Zombieload 2 漏洞,操作系统可以禁用 TSX(Windows的相关信息,Linux的相关信息)

于 2019-12-06T08:39:25.940 回答