VS2010中编写x64汇编的具体方法
来源:互联网 发布:tensorflow读音 编辑:程序博客网 时间:2024/05/29 18:34
VS2010中编写x64汇编的具体方法
编写涉及系统特性的一些底层程序,特别是ShellCode,不可避免地要采用直接编写汇编代码的方式。
在目标平台为x86模式时,可以直接使用内联汇编,这个很多人都比较熟悉了,也非常地方便。
但是当目标平台为x64时,微软不再允许直接内联汇编了,这给我们编程造成了一些不便。
怎么解决这个问题呢? 一种办法是改用Intel的编译器,它仍然支持内联汇编。
另一种办法还是用VS了,但是不能内联,需要把汇编部分单独写到一个asm文件里,然后在其它源文件中引用。
我参考了一些网上的说明,在这里把过程写详细些,方便自己,也方便他人。
主要过程:
一、在asm文件中单独编写功能函数
比如要实现一个64位的加法函数,原型如下:
ULONG64
myAdd(
ULONG64
u1,
ULONG64
u2);
那么新建一个文件,写入以下内容
.CODEmyAdd PROC add rcx,rdx mov rax,rcx retmyAdd ENDPEND
将以上内容保存为myadd.asm,然后加其加入到工程中。
在其它需要引用该函数的源文件中,添加以下声明:
#include "stdafx.h"#include <windows.h>//声明引用外部函数EXTERN_C ULONG64 myAdd(ULONG64 u1,ULONG64 u2);int _tmain(int argc, _TCHAR* argv[]){ ULONG64 result = myAdd(0x111111111,0x333333333); printf("result = 0x%I64X\n",result); return 0;}
二、设置asm文件的生成方式
在asm文件上点击右键,选择“属性”:
然后点击左侧的“常规”,“从生成中排除”选择“否”,“项类型”选择“自定义生成工具”,然后点击应用。
此时在“常规”下面就会出现“自定义生成工具”的条目。
点击它,设置“命令行”为 ml64 /Fo $(IntDir)%(fileName).obj /c %(fileName).asm
如果是32位把ml64改成ml即可
设置输出为 $(IntDir)%(fileName).obj, 该项必须配置,否则VS认为该文件没有设置输出就会不处理它,同时它也告诉链接器到哪里去找这个obj文件。
上面的 $(IntDir)是一个宏,表示当前生成配置的目录,比如"x64\Debug"。
经过以上配置之后,asm文件编译生成的obj文件就会自动生成到相应配置的目录。
三、生成工程
全部配置完成以后,就可以愉快地生成工程了。正常的输出结果如下:
1>------ 已启动生成: 项目: testasm, 配置: Release x64 ------1>生成启动时间为 2016/4/10 9:45:36。1>InitializeBuildStatus:1> 正在创建“x64\Release\testasm.unsuccessfulbuild”,因为已指定“AlwaysCreate”。1>CustomBuild:1> Performing Custom Build Tools1> Assembling: myAdd.asm1> Microsoft (R) Macro Assembler (x64) Version 10.00.40219.011> Copyright (C) Microsoft Corporation. All rights reserved.1> 1>ClCompile:1> stdafx.cpp1> testasm.cpp1>Link:1> 正在生成代码1> 已完成代码的生成1> testasm.vcxproj -> F:\x64Program\testasm\x64\Release\testasm.exe1>FinalizeBuildStatus:1> 正在删除文件“x64\Release\testasm.unsuccessfulbuild”。1> 正在对“x64\Release\testasm.lastbuildstate”执行 Touch 任务。1>1>生成成功。1>1>已用时间 00:00:01.11========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
如果没什么意外的话,就会生成成功了。如果你编写的asm文件有错误的话,在输出中也能看到相应的提示,改掉错误就可以了。
至此,又可以愉快地使用汇编了呢~
- VS2010中编写x64汇编的具体方法
- VS2010中编写x64汇编的具体方法
- x64平台下VC++中汇编函数的编写问题
- 汇编中.word的具体用途是什么
- 汇编中.word的具体用途是什么?
- 汇编中.word的具体用途是什么?
- 汇编中.word的具体用途是什么?
- 汇编中.word的具体用途是什么?
- x64环境下用VS2010配置Opencv2.3.1的方法
- VS2010及gcc中C/C++代码生成为汇编文件的方法
- win7 x64旗舰版搭建汇编环境方法
- 第五章:VS中使用X64汇编
- oc中类的具体实现方法
- thinkphp中create方法的具体使用
- [汇编]_[初级]_[VS2010搭建汇编开发环境win32和x64]
- 关于x64汇编调用api的问题
- 解决VS2010中个别警告方法(具体警告在文中)
- 编写c51程序调用汇编函数的一种方法
- Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH异常的解决方案
- POJ 3469 Dual Core CPU
- 51nod1536 不一样的猜数游戏
- DEVC++编译奇怪报错问题解决
- 业余时间:项目的规划与准备
- VS2010中编写x64汇编的具体方法
- 掌握jQuery插件开发
- 文章1
- maven下载慢---更换下载仓库
- Spring配置Mybatis后,一级缓存失效的原因
- 神经网络与深度学习(序)
- poj 1031
- 一个XSLT的变量、参数和模板调用的问题
- pat-bl-1046