当前位置: 首页 > news >正文

跨境电商是真的吗seo推广软件排名

跨境电商是真的吗,seo推广软件排名,网页设计网站有哪些,客户网站建设问题windows xp,ReactOS系统快速系统调用的实现 windows xp,ReactOS系统快速系统调用的实现 文章目录 **windows xp,ReactOS系统快速系统调用的实现**快速系统调用进入R0我们看MSR寄存器中的内容到底是啥子快速系统调用返回PspLookupKernelUserE…

windows xp,ReactOS系统快速系统调用的实现

windows xp,ReactOS系统快速系统调用的实现

文章目录

  • **windows xp,ReactOS系统快速系统调用的实现**
  • 快速系统调用
  • 进入R0
  • 我们看MSR寄存器中的内容到底是啥子
  • 快速系统调用返回
  • PspLookupKernelUserEntryPoints(VOID)


快速系统调用

从奔腾2开始就增设了两条指令和三个寄存器来支持“快速系统调用”sysenter,sysexit指令,MSR寄存器,这样就实现比较轻便和搞笑的系统调用
在快速系统调用时,用户空间的“int 0x2e"自陷指令大体上为一条sysenter指令锁替代,但是sysenter指令不同于int 指令或者call指令。sysexit指令也不同于iret,ret指令,这两条指令并不涉及 到堆栈的操作。而是依赖一组MSR寄存器。

进入R0

当执行sysenter指令时,CPU进入R0,并且:
1,把寄存器SYSTEMER_CS_MSR的内容复制到段寄存器CS中。
2,把寄存器SYSTEMER_EIP_MSR的内容复制到段寄存器EIP中。
3,把(寄存器SYSTEMER_CS_MSR的内容+8)复制到段寄存器SS中。
4,把寄存器SYSTEMER_ESP_MSR的内容复制到段寄存器ESP中。

这样,只要预先设置好三个MSR寄存器的内容,cpu在指向sysenter指令病会进入R0,并预定的地址开始执行程序, 同时开始使用系统空间的堆栈,而不像通过自陷指令进入系统空间那样要执行那么多的操作,效率提高了。

但是此时CPU不想在执行子限制了时那样自动把用户空间的堆栈指针保存在系统空间堆栈上,甚至也不讲返回地址压入堆栈,所有如果需要就要有对象的程序来完成操作。尽管如此,快速系统调用的效率还是要搞很多,因为至少不需要从中断向量表获取程序入口的位置了。

我们看MSR寄存器中的内容到底是啥子

ULONG_PTR
NTAPI
KiLoadFastSyscallMachineSpecificRegisters(IN ULONG_PTR Context)
{/* Set CS and ESP */Ke386Wrmsr(0x174, KGDT_R0_CODE, 0);Ke386Wrmsr(0x175, (ULONG)KeGetCurrentPrcb()->DpcStack, 0);/* Set LSTAR */Ke386Wrmsr(0x176, (ULONG)KiFastCallEntry, 0);return 0;
}

其中:

#define KGDT_R0_CODE            0x8 
```c
这里可以看出他是一个常量

这里调用了三次Ke386Wrmsr()

#define Ke386Wrmsr(msr,val1,val2) __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))

实际上就是特权指令wrmsr的封装,
第一个参数时目标MSR寄存器的编号。显然这三个端口粉笔为0x174,0x175,x0176
MSR寄存器时64位的,但这三个寄存器时都是32位的,所以第三个参数都为0,
第一次调用把cs设置位8,
第二次用KeGetCurrentPrcb函数获取。
第三次调用指向快速调用的入口地址。这里通过KiFastCallEntry函数获取

快速系统调用返回

与KiFastSystemCall()一样,这是有ntdll.dll导出的一个函数。内核在初始化通过PspLookupKernelUserEntryPoints(VOID)获取ntdll.dll中这两个函数的入口,并将其保存在一个数据结构SharedUserData中,之所以说Shared,是因为其所在的物理页面在系统空间和用户空间都有映射,因此从内核和用户空间都能访问这个数据结构,只是所有的虚拟地址不同

PspLookupKernelUserEntryPoints(VOID)

 NTSTATUS
NTAPI
PspLookupKernelUserEntryPoints(VOID)
{NTSTATUS Status;/* Get user-mode APC trampoline */Status = PspLookupSystemDllEntryPoint("KiUserApcDispatcher",&KeUserApcDispatcher);if (!NT_SUCCESS(Status)) return Status;/* Get user-mode exception dispatcher */Status = PspLookupSystemDllEntryPoint("KiUserExceptionDispatcher",&KeUserExceptionDispatcher);if (!NT_SUCCESS(Status)) return Status;/* Get user-mode callback dispatcher */Status = PspLookupSystemDllEntryPoint("KiUserCallbackDispatcher",&KeUserCallbackDispatcher);if (!NT_SUCCESS(Status)) return Status;/* Get user-mode exception raise trampoline */Status = PspLookupSystemDllEntryPoint("KiRaiseUserExceptionDispatcher",&KeRaiseUserExceptionDispatcher);if (!NT_SUCCESS(Status)) return Status;/* Check if this is a machine that supports SYSENTER */if (KeFeatureBits & KF_FAST_SYSCALL){/* Get user-mode sysenter stub */Status = PspLookupSystemDllEntryPoint("KiFastSystemCall",(PVOID)&SharedUserData->SystemCall);if (!NT_SUCCESS(Status)) return Status;/* Get user-mode sysenter return stub */Status = PspLookupSystemDllEntryPoint("KiFastSystemCallRet",(PVOID)&SharedUserData->SystemCallReturn);}else{/* Get the user-mode interrupt stub */Status = PspLookupSystemDllEntryPoint("KiIntSystemCall",(PVOID)&SharedUserData->SystemCall);}/* Set the test instruction */if (!NT_SUCCESS(Status)) SharedUserData->TestRetInstruction = 0xC3;/* Return the status */return Status;
}

这样需要从快速系统调用返回时,只需要从这个数据结构获取目标地址就行了。至于堆栈指针,则显然是保存在寄存器edx中。
当CPU执行sysexit指令时,则返回用户态。并且:
1,把CS设置成(SYSENTER_CS_MSR的内容+16),这实际上是KGDT_R3_CODE,注意:CS中的RPL位段自动设置为3,三环
2,把寄存器EDX的内容复制到EIP.
3,把SS设置成(SYSTENTER_CS_MSR的内容+24),这实际上是KGDT_R3_DATA注意:SS中的RPL位段自动设置为3
4,把寄存器ECX的内容复制到ESP

九十四,只需要ECX持有用户空间的堆栈指针,并把SharedUserData->SystemCallReturn之于EDX,在执行sysexit就可以了。 可见。sysenter,sysexit的组合,再加上三个MSR寄存器的作用,实现了一种十分简便的快速系统调用和返回机制,相比之下int,iret的组合显得太复杂了。

http://www.tj-hxxt.cn/news/42497.html

相关文章:

  • 阳曲网站建设推荐咨询超级外链推广
  • 网站表格怎么做的seo网站关键词优化排名
  • 汨罗哪里有网站开发的公司电话培训机构退费纠纷一般怎么解决
  • 有源码就可以自己做H5网站吗广告投放的方式有哪些
  • 网站建设与运营的市场百度网页版电脑版入口
  • 手机微网站二级菜单怎么做百度直播
  • 网站建设方案平台湘潭网站设计外包公司
  • 江苏网站建设方案昆明seo排名外包
  • 网站短时间怎么做权重精准的搜索引擎优化
  • 大型网站开发项目合同网络营销策略的内容
  • 推广方式是什么意思windows10优化大师
  • phpcms模板行业网站网站设计公司北京
  • 怎么创建企业网站seo推广网站
  • 软件商城免费下载app长沙建站seo公司
  • 国外做软件界面的设计网站青岛seo网站关键词优化
  • 做国际网站的流程企业宣传标语
  • 电子商务企业网站的基本功能精准粉丝引流推广
  • 建设网站需要什么知识百度推广计划
  • 重庆颐众达网站广告软文范例大全100字
  • 汇云网站建设长沙关键词快速排名
  • 西宁做网站建设公司哪家好教育培训机构平台
  • 全包胶衣网站鞋子软文推广300字
  • 赣州企业网站建设百度收录查询工具
  • 辅助网站怎么做全网营销系统怎么样
  • tp5如何在自己网站后台做pv uv统计云南网站建设公司哪家好
  • 网站设计建好的产品怎么推广语言
  • 中国体育新闻最新消息宁波seo推广方式排名
  • 余姚做企业网站市场营销八大营销模式
  • 泰兴网站建设百度人工电话
  • 昆明中小企业网站建设seo自学网站