32位程序实现64位函数的真正底层调用,syscall

前言:

  • 本源码直接使用syscall汇编实现底层的x64函数的调用,不走任何多余的流程(包括64位的ntdll也不走)

实现:

  • 其实实现起来也不困难:

32位程序实现64位函数的真正底层调用,syscall

用CE看ntdll最后走向内核的实现,无非都是很简单的:

32位程序实现64位函数的真正底层调用,syscall

  • 先把rcx值给r10,然后赋值eax内核调用号(SSDT函数序号),然后判断CPU是否支持快速调用,支持就直接使用syscall,不支持使用int 2E中断门。

  • 本源码相当于直接将64位这些函数的实现过程直接使用汇编写了出来,其实并不复杂,主要是64位传参和32位的约定不同,64位使用rcx,rdx,r8,r9传递前4个参数,从第五个参数开始才使用rsp堆栈传参,明白了这一点,实现64位的syscall其实并不困难。

  • 64位内存读写测试(可以看到在0x100000000处成功申请内存并实现读写和内存属性修改):

32位程序实现64位函数的真正底层调用,syscall测试:真正的系统驱动信息获取(利用NtQuerySystemInformation_x64实现,纯粹的32位NtQuerySystemInformation是不可能实现的,论坛上的驱动信息获取基本没有几个正确的,看驱动的入口点地址就看得出来,64位长的入口点地址才是64位系统下的驱动应该有的地址):

32位程序实现64位函数的真正底层调用,syscall

PS:

  • 更多功能可自行拓展

相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

发表回复

您的电子邮箱地址不会被公开。必填项已用*标注