Я пытаюсь реализовать свою собственную функцию vmread, которая реализует инструкцию x86 vmread для образовательных целей.Почему следующее вызвало ошибку сегментации на гипервизоре xen.
Версия ядра: 4.9.0-4-amd64
версия xen: 4.8.3-pre (preserve-AD)
vmread.h
int vmread(unsigned long long int, int*);
vmread.S
.intel_syntax noprefix
.section .text
.globl vmread
.type vmread, @function
vmread:
vmread [rsi], rdi
jbe __vmx_failure
jmp __vmx_success
__vmx_failure:
mov rax, 0x0
ret
__vmx_success:
mov rax, 0x1
testvmread.c
#include<stdio.h>
#include "vmread.h"
#include <stdint.h>
int main() {
int value = 0;
uint64_t addr = 0x00002804ULL;
vmread(addr, &value);
printf("the value of GUEST_IA32_PAT is %d \n", value);
return 0;
}
скомпилировано с gcc testvmread.c vmread.S -o test