syscall32位程序实现64位函数的真正底层调用易语言源码本源码直接使用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位系统下的驱动应该有的地址):

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系贝贝进行处理。
本站默认解压密码:www.hibbba.com