前言:
本源码直接使用syscall汇编实现底层的x64函数的调用,不走任何多余的流程(包括64位的ntdll也不走)
实现:
其实实现起来也不困难:
用CE看ntdll最后走向内核的实现,无非都是很简单的:
先把rcx值给r10,然后赋值eax内核调用号(SSDT函数序号),然后判断CPU是否支持快速调用,支持就直接使用syscall,不支持使用int 2E中断门。
本源码相当于直接将64位这些函数的实现过程直接使用汇编写了出来,其实并不复杂,主要是64位传参和32位的约定不同,64位使用rcx,rdx,r8,r9传递前4个参数,从第五个参数开始才使用rsp堆栈传参,明白了这一点,实现64位的syscall其实并不困难。
64位内存读写测试(可以看到在0x100000000处成功申请内存并实现读写和内存属性修改):
测试:真正的系统驱动信息获取(利用NtQuerySystemInformation_x64实现,纯粹的32位NtQuerySystemInformation是不可能实现的,论坛上的驱动信息获取基本没有几个正确的,看驱动的入口点地址就看得出来,64位长的入口点地址才是64位系统下的驱动应该有的地址):
PS:
更多功能可自行拓展