您当前所在位置:首页推荐资讯SYSCALL SWAPGS

SYSCALL SWAPGS

更新:2024-04-23 03:39:21编辑:华天下载归类:推荐资讯人气:5

  references:

  https://www.felixcloutier.com/x86/swapgs

  swapgs指令会将GS寄存器的值和MSR地址为C0000102H(IA32_KERNEL_GS_BASE)的值进行交换

  当时用SYSCALL实现系统调用的时候,不存在内核栈空间,也不存在指向保存了内核栈空间内核结构的指针

  因此,内核没办法去保存通用寄存器的值或者引用的内存里的值懒人修仙传轻变修改器

  关于为什么要保存通用寄存器或者内存里的值到栈里面请参考这篇文章:https://blog.csdn.net/ma_de_hao_mei_le/article/details/124604874

  SWAPGS指令不需要任何***作数

  在使用该指令之前不需要保存任何通用寄存器,

  在交换完毕之后就可以使用GS作为段地址来访问内核结构了

  尝试给函数下断点,下完断点之后直接导致虚拟机崩溃了

  后来网上搜可一下

  https://stackoverflow.com/questions/65367333/breakpoint-setting-in-ntkisystemcall64-not-working

  说是因为该函数的前三条指令是用于设置内核栈空间的,内核调试需要先执行这三条指令来设置栈空间,也就是说这三条指令上面是不能下断点的,需要往后偏移

  还有就是如果断点一直不被触发,有可能是因为目标机器上装了什么杀软导致的,卸载再尝试一下24格官网

  从push 2B那条指令开始调试,也就是

  段寄存器+偏移量和虚拟地址的映射

  ; 看了一下书,书上说前面那些***作是在设置内核栈空间,我不知道作者是怎么知道这些的

  ; gs就是KPCR 后面的偏移量就是指代了特定的成员

  gs:[10]就是UserRsp,也就是说该成员变量就是用于保存用户空间的rsp的值的

  然后gs:[1a8]是KPCR结构体中的_KPRCB结构体中的一个成员变量

SYSCALL SWAPGS

  1a8-180 = 28

  看样子PRCB并不是一个结构体,因为这个成员的值根本就不是一个地址,哎呀我也搞不太明白,算了就这样吧

  https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/dx–display-visualizer-variables-

  哦明白了,相当于把这个地址解释成特定的类型((ntkrnlmp!_KPRCB *))

  所以这个gs:[1a8]就是将要被设置为内核栈空间的rsp的值 mark

  完整注释 base64 encode

闪艺游戏盒正式版特色 王国风云3 v1.9.1中文版