2初识内核WOW64进程

64位操作系统下的32位程序

32位系统内核时32位的,64位系统内核时64位的,32位有32位的指令集,64位有64位的指令集,CUP是怎么区分自己执行的是哪个指令集
32位操作系统下进入内核的指令是sysenter,64位系统下64位进程进入内核的指令时syscall,那么64位系统下32位进程该执行什么指令呢?
在这里插入图片描述

观察64位系统下的32位进程ntdll.zwclose ,发现它call了一个地址
跟进去看一下
在这里插入图片描述
F7跟进
在这里插入图片描述

在这里插入图片描述
可以发现现在处于wow64upc模块中

这里需要使用特殊版本的调试器Yzdbg ,F7跟进

在这里插入图片描述
发现一堆乱七八糟的代码
在这里插入图片描述
切换锁定x64模式

在这里插入图片描述

代码变成了jmp qword ptr ds:[r15+0x000000F8] 也就是说此时UPC执行的汇编指令集切换成64位

在这里插入图片描述
这里发现CS被改变了,也就是说 jmp far 0x0033 : 0x77C87009 指令执行后改变了CS 。
前面提到过CS,SS会影响权限 ,也就是说CS可能还影响着CPU执行的指令集是64位还是32位。

接着F7跟进函数
在这里插入图片描述

在这里插入图片描述
到这里看到了syscall ,syscall是64位进入内核的指令,

64位系统下32位进程进入内核流程

应用层执行32位代码-----调用API—进入32位ntdll----跳到中转层wow64Transition,修改CS段寄存器将32位环境切换到64位并且保存32位环境的上下文--------通过调用syscall进入内核。

在32位进程调用系统调用时,它会通过 wow64Transition 函数进入 wow64cpu.dll。 wow64cpu.dll 是 WOW64 子系统的一部分,它负责处理32位进程和64位内核之间的系统调用转换和交互。

系统调用传递给64位内核:

wow64cpu.dll 将转换后的64位系统调用传递给64位内核进行处理。
64位内核处理系统调用:

64位内核处理完系统调用后,将结果返回给 wow64cpu.dll。
结果传递给32位进程:

wow64cpu.dll 将64位内核返回的结果转换为32位格式,并将结果返回给32位进程。
继续执行32位进程:

32位进程收到系统调用的结果后,继续执行,并根据结果进行相应的操作。
通过这个流程,32位进程能够在64位系统上运行,并且能够与64位内核进行交互,从而实现了系统调用的处理。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值