Windows7下驱动开发与调试体系构建——4.在x64下使用汇编代码(x86下的_asm)
asm文件设置
在vs x64中无法使用_asm关键字,需要使用.asm文件。
按第一节的内容创建好项目后,右键Resource Files,添加->新建项->头文件(.h),将名称改为test.asm


右键asm文件,将"从生成中排除"设为"否",将"项类型"设为"自定义生成工具",点击"应用"按钮,配置属性中会增加"自定义生成工具"这一选项。

将"命令行"设为"ml64 /Fo $(IntDir)%(fileName).obj /c %(fileName).asm"
将"输出"设为"$(IntDir)%(fileName).obj"
至此,asm文件设置完毕,接下来进行汇编代码的使用。
汇编代码的使用
在源文件的头部增加这么一行代码:"EXTERN_C void Int_3();"
其中,"EXTERN_C"关键字为驱动使用,而其他语言如c++,关键字不同,为" extern "C" ",这一点需要注意。
接下来就可以使用汇编函数了。

注意,此时无法编译,原因是vs使用了wpp。尝试编译,提示:"wpp Fatal error: CreateFile error"。原因是默认开启了"Wpp Tracing",在项目属性中关闭"Run Wpp Tracing"选项即可编译。


项目代码
Driver.c
#include <ntddk.h> EXTERN_C void Int_3(); // 提供一个Unload函数只是为了让程序能够动态卸载,方便调试
VOID DriverUnload(PDRIVER_OBJECT driver)
{
// 但是实际上我们什么都不做,只打印一句话:
DbgPrint("\r\nASM TEST unloading…\r\n");
} // DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
Int_3();
// 这是我们的内核模块的入口,可以在这里写入我们想写的东西。
DbgPrint("\r\nASM TEST!\r\n"); // 设置一个卸载函数便于这个函数能退出。
driver->DriverUnload = DriverUnload; return STATUS_SUCCESS;
}
test.asm
.CODE Int_3 PROC
int 3
ret
Int_3 ENDP END

Windows7下驱动开发与调试体系构建——4.在x64下使用汇编代码(x86下的_asm)的更多相关文章
- Windows7下驱动开发与调试体系构建——0.概述
本文集内容为windows7x64下驱动开发与调试体系构建,内容目录如下: 1.驱动开发的环境准备 2.R3与R0的通信示例 3.自建调试体系概述 4.在x64下使用汇编代码 5.实战反调试标记位(N ...
- Windows7下驱动开发与调试体系构建——2.R3与R0的通信示例
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 在阅读本节前,建议先阅读<Windows内核安全与驱动开发>第五章内容, ...
- Windows7下驱动开发与调试体系构建——3.调试体系概述
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 调试体系概述 0.什么是自建调试体系? 就是复写windows的调试api,使得调试 ...
- Windows7下驱动开发与调试体系构建——1.驱动开发的环境准备
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 系统基础环境 开发环境 win7下开发驱动需要安装vs,这里使用2017. 安装vs ...
- Windows7下驱动开发与调试体系构建——5.实战反调试标记位(NtGlobalFlag)
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html <加密与解密>P670中,介绍了检查程序是否被调试的第二种方法:查看进程 ...
- 2013-6-2 [转载自CSDN]如何入门Windows系统下驱动开发
[序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概 ...
- 如何正确入门Windows系统下驱动开发领域?
[作者]猪头三个人网站 :http://www.x86asm.com/ [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文 ...
- 驱动开发 - WDK 调试及 SVN 环境搭建
由于从公司辞职了,所以以前在公司里搭建的驱动开发环境也就 Game Over 了, 同样由于那环境是很久以前搭建的,自己也有很多记不清楚的地方了, 而且其中还是有很多需要注意的地方的,所以在这里顺便做 ...
- windows7内核驱动开发试验环境配置
首先配置环境参照这个: http://blog.csdn.net/qing666888/article/details/50858272 然后在win10里可能由于没有做测试签名因此一直没有成功加载驱 ...
随机推荐
- 通过route , tracert , traceroute 查看本地路由配置及访问ip或域名时经过的路由信息
转载请注明出处: 1.路由器和交换机的区别和过程 在windows 系统或linux 系统访问 外网ip 或域名时,都会通过层层的路由器,然后将请求转发到最终的目标服务器:因为互联网通过路由器实现公网 ...
- 论文解读(SEP)《Structural Entropy Guided Graph Hierarchical Pooling》
论文信息 论文标题:Structural Entropy Guided Graph Hierarchical Pooling论文作者:Junran Wu, Xueyuan Chen, Ke Xu, S ...
- Vue 3-150行代码实现新国标红绿灯效果案例
昨天刷视频,都是关于新国标红绿灯的,看大家议论纷纷,下班就用150行代码通过Vue组件实践红绿模拟演示,视频也跟大家展示过了.今天接着更新图文版本,大家跟着优雅哥通过该案例实操模拟一下. 不过新国标红 ...
- CCF NOI Online 2021 提高组 赛后心得
T1 做个,不会,拿到 20 pts 跑路. 注意后面有个 K = 1 的部分分,这个可以递推求 b 的个数,然后直接乘上 a0 . 官方正解讲得极其详细,我还是第一次见到可以 O(K2) 做 1~n ...
- 【Java】学习路径63-反射、类的加载-附思维导图(完结)
这一章的知识在实际开发也没有那么重要,主要是了解即可,另外掌握如何使用反射机制. 类的使用: 在虚拟机中: 类的加载->类的连接->类的初始化 类的加载 只会加载需要用到的类,加载到内 ...
- 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程
大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...
- [网鼎杯 2020 朱雀组]phpweb-1|反序列化
1.打开界面之后界面一直在刷新,检查源代码也未发现提示信息,但是在检查中发现了两个隐藏的属性:func和p,抓包进行查看一下,结果如下: 2.对两个参数与返回值进行分析,我们使用dat时一般是这种格式 ...
- KingbaseES 与 Oracle 用户口令管理与资源管理
一.概述 KingbaseES可以对用户口令与用户占用资源进行必要的管理.其管理方式,在这里与Oracle数据库进行参考比较. KingbaseES 使用扩展插件建立的系统参数,这组参数可以对数据库资 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(20)-Fiddler精选插件扩展安装,让你的Fiddler开挂到你怀疑人生
1.简介 Fiddler本身的功能其实也已经很强大了,但是Fiddler官方还有很多其他扩展插件功能,可以更好地辅助Fiddler去帮助用户去开发.测试和管理项目上的任务.Fiddler已有的功能已经 ...
- 2021年3月-第01阶段-Linux基础-Linux系统的启动流程
Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题. 上图为Linux操作系统启动流程 1.加载BIOS 计算机 ...