64位驱动里内嵌汇编

讲道理64位驱动是不能直接内链汇编的,遇到这种问题,可以考虑直接把机器码拷贝到内存里,然后直接执行。

获得机器码的方式,可以写好代码之后,直接通过vs看反汇编,然后根据地址在看内存内容,再把内存内容复制出来。或者是去我看的资料上的那个作者提供的一个工具:

http://www.vbasm.com/thread-5651-1-1.html)直接把汇编编程机器码。

内嵌的汇编子程序有返回值以及 给汇编子程序传入参数

首先是使用 typedef 定义一下你的汇编子程序的原型,然后把机器码复制到 NonPagedPool 里,最后直接把 NonPagedPool 的地址当作函数来 CALL。代码示例如下(输入四个数字相加,返回它们相加的值):

typedef UINT64 ( __fastcall *SCFN)(UINT64,UINT64,UINT64,UINT64);
VOID test()
{
SCFN scfn;
UINT64 ret;
UCHAR strShellCode[14]="\x48\x03\xCA\x49\x03\xC8\x49\x03\xC9\x48\x8B\xC1\xC3";
/*
add rcx,rdx
add rcx,r8
add rcx,r9
mov rax,rcx
ret
*/
scfn=ExAllocatePool(NonPagedPool,14);
memcpy(scfn,strShellCode,14);
ret=scfn(11,22,33,44);
DbgPrint("[x64Drv] Inline ASM return: %lld",ret);
ExFreePool(scfn);
}

Win64 驱动内核编程-24.64位驱动里内嵌汇编相关推荐

  1. Win64 驱动内核编程-3.内核里使用内存

    内核里使用内存 内存使用,无非就是申请.复制.设置.释放.在 C 语言里,它们对应的函数是:malloc.memcpy.memset.free:在内核编程里,他们分别对应 ExAllocatePool ...

  2. Win64 驱动内核编程-8.内核里的其他常用

    内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...

  3. Win64 驱动内核编程-5.内核里操作文件

    内核里操作文件 RING0 操作文件和 RING3 操作文件在流程上没什么大的区别,也是"获得文件句柄->读/写/删/改->关闭文件句柄"的模式.当然了,只能用内核 A ...

  4. Win64 驱动内核编程-2.基本框架(安装.通讯.HelloWorld)

    驱动安装,通讯,Hello World 开发驱动的简单流程是这样,开发驱动安装程序,开发驱动程序,然后安装程序(或者其他程序)通过通讯给驱动传命令,驱动接到之后进行解析并且执行,然后把执行结果返回. ...

  5. Win64 驱动内核编程-18.SSDT

    SSDT 学习资料:http://blog.csdn.net/zfdyq0/article/details/26515019 学习资料:WIN64内核编程基础 胡文亮 SSDT(系统服务描述表),刚开 ...

  6. Win64 驱动内核编程-9.系统调用、WOW64与兼容模式

    系统调用.WOW64与兼容模式 这种东西都是偏向于概念的,我就把资料上的东西整理下粘贴过来,资料来源于胡文亮,感谢这位前辈. WIN64 的系统调用比 WIN32 要复杂很多,原因很简单,因为 WIN ...

  7. Win64 驱动内核编程-6.内核里操作注册表

    内核里操作注册表 RING0 操作注册表和 RING3 的区别也不大,同样是"获得句柄->执行操作->关闭句柄"的模式,同样也只能使用内核 API 不能使用 WIN32 ...

  8. Win64 驱动内核编程-4.内核里操作字符串

    内核里操作字符串 字符串本质上就是一段内存,之所以和内存使用分开讲,是因为内核里的字符串太有花 样了,细数下来竟然有 4 种字符串!这四种字符串,分别是:CHAR*.WCHAR*.ANSI_STRIN ...

  9. Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook

    Ring0 InLineHook 和UnHook 如果是要在R0里hook,作者的建议是InLine HOOK,毕竟SSDT HOOK 和 SHADOW SSDT HOOK比较麻烦,不好修改.目前R3 ...

最新文章

  1. CDO/CDS与次贷危机
  2. Python3调用MySQL数据库中的数据
  3. 一个ABAP调试器里查看类的静态属性的小技巧
  4. canvas绘制线条1像素的问题
  5. Win环境安装VMware Server 2.0手记
  6. php 实现 java com.sun.org.apache.xml.internal.security.utils.Base64 Byte数组加密
  7. linux设置web服务器配置,Linux下配置功能完善的Web服务器
  8. 连接access时的REGDB_E_CLASSNOTREG(0x80040154)错误
  9. 2012年--麦思博--12月7-9日全球软件案例研究峰会讲师ppt
  10. 在阿里,一个完整的机器学习项目是这样运作的。
  11. 大厂P5、P6、P7级程序员的简历长什么样?
  12. 灵雀云Kube-OVN:基于OVN的开源Kubernetes网络实践
  13. 美图公司去年净利润8510万,“炒币”浮盈近4亿元
  14. 跟随器为何要加反馈电阻?
  15. chrome安装插件,安装Postman
  16. 四川省国家级自然保护区功能区划
  17. 小米手机市场份额为何下降
  18. 计算机主机突然断电有什么影响吗,电脑突然断电对硬盘有影响?实测后真相了...
  19. 淘宝钓鱼网站抓不住吗
  20. 关于打码机色带应用及其调整方法

热门文章

  1. SQL语句中各个部分的执行顺序(转)
  2. 【转】编程思想之消息机制
  3. 把工程部署在tomcat的root路径下
  4. [LeetCode] Restore IP Addresses 复原IP地址
  5. Intent进阶 和 Intent-filter 学习笔记
  6. 小心!目录删除及重命名操作 ,一定丢失Session~~!
  7. html和css入门 (三)
  8. Flask-Migrate拓展数据库表结构
  9. as用百度地图不联网就gg
  10. 自动生成Hibernate框架结构