我正在写一个基于Intel VT的debugging器。
由于在NMI-Exiting = 1时,virex指令在vmx-guest中的性能发生了改变。 所以我应该自己处理vmx-host中的NMI,否则guest将会有nmi可重入的bug。
我查了英特尔手册:
当NMI中断处理程序正在执行时,处理器会禁用对NMI处理程序的额外调用,直到执行下一个IRET指令为止。 这种对后续NMI的阻塞防止了对NMI处理程序的调用。
我如何使用中断触发x86程序集中的除零错误exception?
为什么Linux不遵循Unix系统调用约定?
用x86 32位Linux打印一个整数sys_write(NASM)
x64组装优化
实现x86到x64汇编代码开关
所以我试图在vmx-host里模拟一个iret。 CPL保持ring0并保持堆栈和代码段不变。
我在下面写了一个示例代码,它是在NMI引起的vmx-exit之后:
asm volatile( "pushfq nt" "mov %%cs.%%ax nt" "push %%raxnt" "mov $._restart_code,%%rax nt" "push %%rax nt" "iret nt"/*manully iret in the host before vmx-entry.*/ "._restart_code:" "nop":);
任何人都可以展示一些指南
如何在Ubuntu Linux中执行CMU二进制炸弹?
为什么nasm说我在g ++创build的程序集中有错误?
PE文件中没有.BSS
在Linux上以64位进程运行32位代码 – 内存访问
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。