微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在linux x86_64上模拟一个iret

我正在写一个基于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

为什么OSX得到一个amd64间接跳转的总线错误

在Linux上以64位进程运行32位代码 – 内存访问

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐