sysenter/sysexit 原理

1.从ring0到ring3最开始是用的int2E,此模式切换过程设计很多次内存访问,还有两次查表操作机访问权限的检查,这导致模式切换的开销很大从PentiumII 处理器开始,Inter引入了新的指令sysenter/sysexit,来实现快速的模式切换。

2.其做法尽可能避免内存访问,而通过处理器的内部寄存器来指定必要信息。sysenter使用3个MSR寄存器来指定跳转目的地址和栈位置。 可以在内核模式下通过 rdmsr/wrmsr 指令来设置这3个寄存器。(可想而知,在这可以HOOK)

HOOk代码:

NTSTATUS HookSYSENTER() { _asm mov ecx,0x176; // IA32_SYSENTER_EIP 在MSR的偏移为0x176 _asm rdmsr; // 将ECX+MSR在GDT所指向的值加载到 EDX:EAX _asm mov OrigKiFastCallEntry,eax; _asm mov eax,MyKiFastCallEntry; _asm wrmsr; // 将 EDX:EAX 中的值写入ECX+MSR在GDT所指向地方 return STATUS_SUCCESS; }

OrigKiFastCallEntry 是内核模式的入口函数,从ring0到ring3 入口点

3.sysenter 内部指令: 1.将IA32_SYSENTER_CS 和IA32_SYSENTER_EIP分别装到cs和eip寄存器中 2.将IA32_SYSENTER_CS+8 和IA32_SYSENTER_ESP 分别装载到ss和esp寄存器中,切换特权级0;

4.sysexit指令,它内部逻辑是: 1.将IA32_SYSENTER_CS+16装载到cs寄存器,将edx寄存器中的指令的指针装载到eip; 3.将IA32_SYSENTER_CS+24装载到ss寄存器中; 4.将ecx寄存器中的指针装载到esp中,切换到特权3.

5.sysenter / sysexit 只使用固定值,或寄存器的值来完成跳转,从而达到快速切换代码段和栈段的目的。

流程如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)

    先强调一点:在一切可能的场景,尽可能地使用前向声明(Forward Declaration)。这符合信息隐蔽的原则。

    Linux阅码场
  • Selenium处理JavaScript对话框

    在日常的UI自动化测试中,经常会遇到网页弹出警告框,WebDriver可以轻松处理JavaScript对话框。 JavaScript弹出的对话框常见的有三种:a...

    Altumn
  • Windows使用ROS机器人操作系统全面资料汇总

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    zhangrelay
  • 好用到哭!8个技巧让Vim菜鸟变专家

    Vim只不过是一个文本编辑器,但如果你曾见过真正的高手是如何使用vim的,你就会知道,这个软件出人意料地强大、高效、迅捷。对于高水平使用者而言,vim能够帮助其...

    昱良
  • Katalon Studio元素抓取功能Spy Web介绍

    Katalon Studio提供了Web Object Spy功能,该功能可以主动抓取元素及其属性。同时,内置的验证和Highlight显示功能可以进一步验证元...

    Altumn
  • 单片机|简述SPI协议

    SPI(Serial Pripheral Iteric--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息...

    算法与编程之美
  • 为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

    OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。

    一个优秀的废人
  • ROS2之windows案例汇总

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    zhangrelay
  • Katalon Studio录制回放功能使用介绍

    Katalon Studio提供了Record & Playback功能让自动化测试变得十分简单,该功能和UFT(QTP)的录制回放功能大同小异。这项功能可以让...

    Altumn
  • C++ std::isnan等函数的使用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    ccf19881030

扫码关注云+社区

领取腾讯云代金券