VS2012上64位驱动恢复_asm关键字完整方案

首先是kx上的帖子 提示了Intel Parallel Studio XE这个玩意 下面我把我自己的配置流程说一下

1、去官网下载Intel Parallel Studio XE,我下载的是 2015版本,试用期31天

2、UAC命令开启菜单栏中Intel Parallel Studio XE 2015>Visual Studio integrations>Use VS2012 注意 不开UAC编译可能会效验失败

3、配置VS2012 注意 需要的是WDK7.6版本

编译平台选择Intel


Target Extension .sys


Additional Include Directories:

 C:\WinDDK\7600.16385.1\inc\api;C:\WinDDK\7600.16385.1\inc\ddk;C:\WinDDK\7600.16385.1\inc\crt;


Preprocessor Definitions:

WIN64
_CONSOLE
_AMD64_
_DDK_
_NDEBUG
DBG=0


Additional Library Directories

C:\WinDDK\7600.16385.1\lib\win7\amd64


Additional Dependencies:

 ntoskrnl.lib
hal.lib
ntstrsafe.lib


其他设置参见32位的驱动设置 注意调用约定改为_fastcall



### 关键字 `__asm` 的功能 在 C/C++ 中,`__asm` 是一个用于嵌入汇编代码的关键字。此关键字允许开发者直接在高级语言程序中编写机器特定的低级指令[^3]。 具体来说,在某些情况下,使用内联汇编可以优化性能或访问硬件特性,这些可能是纯 C/C++ 编程无法轻易做到的。不过需要注意的是,由于不同架构有不同的汇编语法(比如 Intel 和 AT&T),因此移植性可能会受到影响[^4]。 ### 使用方法 #### 单行汇编 对于简单的单行汇编指令而言,可以直接将命令作为字符串参数传递给 `__asm` 或者 `asm`: ```cpp int myesp; __asm__("movl %%esp,%0" : "=r"(myesp)); ``` 上述例子展示了如何获取当前栈指针寄存器 ESP 的值并存储到变量 `myesp` 中。 #### 多行汇编 当需要插入多条汇编语句时,则可以通过换行符 `\n` 来分隔各条指令: ```cpp __asm__( "mov eax,1\n" "leave\n" "ret\n" ); ``` 这段代码实现了函数返回操作,其中包含了设置 EAX 寄存器以及执行 leave 和 ret 指令来完成调用约定的要求。 #### 设置汇编语法风格 不同的编译工具链可能默认采用不一样的汇编语法形式,默认通常是 AT&T 风格;如果希望切换至更直观易读的 Intel 语法,可以在前面加上相应的声明: ```cpp __asm__(".intel_syntax noprefix"); // ... your assembly code here ... __asm__(".att_syntax prefix"); ``` 这使得在同一源文件内部能够灵活调整所使用的汇编表达方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值