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

有什么问题吗?

这是我的代码。

main.c

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

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

1:
   mov $-1, %rax
   retq

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

最佳答案

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

则可能是您的CPU没有TSX功能。根据英特尔®64和IA-32架构软件开发人员手册ch.16.3.1.2 Detection of RTM Support:

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

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

关于assembly - 汇编程序xbegin引发非法指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59209381/

10-09 08:46