我正在写一个基于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二进制炸d?
为什么nasm说我在g ++创build的程序集中有错误?
PE文件中没有.BSS
为什么OSX得到一个amd64间接跳转的总线错误?
在linux上以64位进程运行32位代码 – 内存访问
总结以上是内存溢出为你收集整理的如何在linux x86_64上模拟一个iret全部内容,希望文章能够帮你解决如何在linux x86_64上模拟一个iret所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)