xen - 如何在 xen 4.13.0 中添加超级调用
问题描述
我尝试按照教程为 xen 添加新的超级调用,但是由于 entry.S 中没有 ENTRY(hypercall_table),它们都无法工作,如何在最新版本的 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;
}
推荐阅读
- python - 熊猫数据框应用 lambda 索引错误
- javascript - MaterializeCSS 将多选菜单捆绑在一起
- python - 创建一个直方图,将数组值分类到 bin 中,并显示 bin 中项目的频率
- android - 如何在 Android Emulator 中模拟慢速磁盘 IO?
- linux - Linux命令从长字符串中打印一些字符
- angular - Angular - Value not being passed to Modal view
- python - How to loop over values in JSON data?
- python - Selenium input date on disabled datepicker
- java - 不会为 ArrayList 中的每个项目调用 OnSuccessListener
- android - Trouble Getting LatLng from Google places json array object