调用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 Windows,for Linux)
关于assembly - 汇编程序xbegin引发非法指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59209381/