首页 > 解决方案 > 如何在 xen 4.13.0 中添加超级调用

问题描述

我尝试按照教程为 xen 添加新的超级调用,但是由于 entry.S 中没有 ENTRY(hypercall_table),它们都无法工作,如何在最新版本的 xen 中添加新的超级调用?

标签: xen

解决方案


创建自定义超级调用的简单方法是观察如何声明一个简单的超级调用并尝试模仿其行为。我这样做了,并且能够成功编写一个。

以下步骤在Xen 4.13中重现

假设我想创建一个attack超级调用来模仿 Xen 内部的一些恶意行为。

1 - 定义 HC 条目

xen/include/public/xen.h

#define __HYPERVISOR_arch_6               54
#define __HYPERVISOR_arch_7               55 
/* Attack Emulation hypercall */
#define __HYPERVISOR_attack               56

2-定义其签名

/xen/include/xen/hypercall.h

extern long
do_attack(
    int cmd,
    XEN_GUEST_HANDLE_PARAM(void) arg);

3-在程序集源中声明其页面

/xen/arch/x86/guest/hypercall_page.S

DECLARE_HYPERCALL(attack)

4-将其声明为 HVM 模式

/xen/arch/x86/hvm/hypercall.c

    HYPERCALL(arch_1),
    HYPERCALL(attack)
 };

5-声明它将具有的参数数量

xen/arch/x86/hypercall.c

     ARGS(arch_1, 1),
     ARGS(attack, 2),
 };

6-声明它的身体:

/xen/common/kernel.c

DO(attack)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)`
{
    printk("Entering Attack Hypercall:\t%d\n", cmd);
    return 0;
}

推荐阅读