segfault при выполнении инструкции x86 vmread - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь реализовать свою собственную функцию 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

...