如何用windbg观察ring3进ring0的过程
答案:1 悬赏:40 手机版
解决时间 2021-11-24 22:58
- 提问者网友:我们很暧昧
- 2021-11-24 16:56
如何用windbg观察ring3进ring0的过程
最佳答案
- 五星知识达人网友:轮獄道
- 2021-11-24 17:03
SYSENTER 指令是在 Inter Pentium(R) Ⅱ 处理器上作为“快速系统调用”功能的一部分被首次引用的。
SYSENTER 指令进行过专门的优化,能够以最佳性能由 Ring3 层切换到 Ring0 层。
微软首次引用 SYSENTER 指令是在 Windows 2000 的系统上,再次之前微软的系统是通过自陷指令 int 0x2E 进入 Ring0 层的系统空间的。
在 Windows 2000 及以后的系统中,如果想要从 Ring3 层进入 Ring0 层,系统首先会将要调用的系统调用号(SSDT调用号)放入 EAX 中,然后将当前栈指针 ESP 的内容放入 EDX 中后执行SYSENTER 指令;
SYSENTER 被执行后会将控制权传递给特殊模块寄存器 IA32_SYSENTER_EIP 所指向的函数中,完成后续操作。
特殊模块寄存器组(Model-Specific registers,MSRs)是 CPU 中负责执行一些特定的、与计算逻辑相关性不大的、且操作较复杂的功能的一组寄存器。
特殊模块寄存器可通过使用 rdmsr/wrmsr 指令读写其位于 MSRs 指定偏移处的某个寄存器的信息。
MSRs 共包含上百种具有不同功能的寄存器。每个寄存器所在的偏移与所占用的空间都不尽相同,目前 MSRs 的可用偏移范围是 0x00000000 ~ 0xC0000103。
与 SYSENTER 相配合的 MSRs 共有3个,其详细信息如下所示:
名称 偏移 说明
SYSENTER_CS_MSR 0x174 切换到 Ring0 层之后的 CS 选择器
SYSENTER_ESP_MSR 0x175 切换到 Ring0 层之后的 ESP
SYSENTER_EIP_MSR 0x176 切换到 Ring0 层之后的 EIP
SYSENTER 被执行时,这 3 个寄存器会执行以下操作配合.
SYSENTER 完成的切换操作:
装载 SYSENTER_CS_MSR 到 CS 寄存器,设置目标代码段;
装载 SYSENTER_EIP_MSR 到 EIP 寄存器,设置目标指令;
将 SYSENTER_CS_MSR + 8 装载到 SS 寄存器,设置栈段;
装载 SYSENTER_ESP_MSR 到 ESP 寄存器,设置栈帧;
切换 Ring0;
清除 EFLAGS 的 VM 标志;(虚拟8086方式标志)
执行位于 EIP 处的 RING0 例程。
SYSENTER 指令进行过专门的优化,能够以最佳性能由 Ring3 层切换到 Ring0 层。
微软首次引用 SYSENTER 指令是在 Windows 2000 的系统上,再次之前微软的系统是通过自陷指令 int 0x2E 进入 Ring0 层的系统空间的。
在 Windows 2000 及以后的系统中,如果想要从 Ring3 层进入 Ring0 层,系统首先会将要调用的系统调用号(SSDT调用号)放入 EAX 中,然后将当前栈指针 ESP 的内容放入 EDX 中后执行SYSENTER 指令;
SYSENTER 被执行后会将控制权传递给特殊模块寄存器 IA32_SYSENTER_EIP 所指向的函数中,完成后续操作。
特殊模块寄存器组(Model-Specific registers,MSRs)是 CPU 中负责执行一些特定的、与计算逻辑相关性不大的、且操作较复杂的功能的一组寄存器。
特殊模块寄存器可通过使用 rdmsr/wrmsr 指令读写其位于 MSRs 指定偏移处的某个寄存器的信息。
MSRs 共包含上百种具有不同功能的寄存器。每个寄存器所在的偏移与所占用的空间都不尽相同,目前 MSRs 的可用偏移范围是 0x00000000 ~ 0xC0000103。
与 SYSENTER 相配合的 MSRs 共有3个,其详细信息如下所示:
名称 偏移 说明
SYSENTER_CS_MSR 0x174 切换到 Ring0 层之后的 CS 选择器
SYSENTER_ESP_MSR 0x175 切换到 Ring0 层之后的 ESP
SYSENTER_EIP_MSR 0x176 切换到 Ring0 层之后的 EIP
SYSENTER 被执行时,这 3 个寄存器会执行以下操作配合.
SYSENTER 完成的切换操作:
装载 SYSENTER_CS_MSR 到 CS 寄存器,设置目标代码段;
装载 SYSENTER_EIP_MSR 到 EIP 寄存器,设置目标指令;
将 SYSENTER_CS_MSR + 8 装载到 SS 寄存器,设置栈段;
装载 SYSENTER_ESP_MSR 到 ESP 寄存器,设置栈帧;
切换 Ring0;
清除 EFLAGS 的 VM 标志;(虚拟8086方式标志)
执行位于 EIP 处的 RING0 例程。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯