欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Win64 驱动内核编程-24.64位驱动里内嵌汇编

发布时间:2025/6/17 编程问答 6 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Win64 驱动内核编程-24.64位驱动里内嵌汇编 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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位驱动里内嵌汇编的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。