易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

【首发】32位程序实现64位函数的真正底层调用,syscall   [复制链接]

    2022-07-25 09:15:31
    高级教程源码
    易语言资源网
    3554 次浏览
    来源链接

前言:

  • 本源码直接使用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位系统下的驱动应该有的地址):


点我下载 (已有 207 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
x64Get.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:zyjson合并添加数组对象的调试工具,...     下一篇:自适应五种方式的 信息提示条模块源码,内...