飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6759|回复: 6

[x64] VS2008 X64工程中嵌套汇编编译说明

[复制链接]

该用户从未签到

发表于 2015-1-3 23:42:55 | 显示全部楼层 |阅读模式
Microsoft Visual Studio 2008 在X64工程中目前不支持内嵌汇编语言,现在折中的解决发方案大致有这两种:

第一种:替换默认的编译器

将VS的默认编译器替换成 Intel Visual Fortran Composer XE 的。该编译器支持X64工程中内嵌汇编指令: __asm{ mov rax,rax } ,没有亲测,有兴趣的朋友可以自行搜索下载测试。
不过VS2008好像就无福消受该待遇了,VS2010以上的工程可以在这里设置:

00.jpg

第二种:将汇编剥离到单独的.asm文件中链接obj,在CPP文件中调用导出函数。

首先我们要设置 *.asm 文件的编译规则:

11.jpg

默认的只有前两项,其中*.asm 默认的编译器为: ml.exe。我们需要到规则目录中赋值一份该规则(路径为:C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCProjectDefaults ),并将编译器修改为ml64.exe。规则文件这里修改为:CommandLine="ml64.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"。然后选择我们添加的规则:

12.jpg

这里有修改好的规则,可以直接使用: masm64.rar (2.61 KB, 下载次数: 38) ,放到 C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCProjectDefaults 目录中。

这样我们就可以编译该ASM文件,并且可以在VS工程中调用这些函数:

13.jpg



  1. #include "inject.h"

  2. #ifdef _DEBUG
  3. #pragma comment(lib,"x64\\Debug\\Inject.obj")
  4. #else
  5. #pragma comment(lib,"x64\\Release\\Inject.obj")
  6. #endif

  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9.     NsInitDll();  // ASM 定义的函数
  10.     return 0;
  11. }
复制代码





评分

参与人数 5威望 +44 飘云币 +44 收起 理由
不破不立 + 20 + 20 感谢发布原创作品!
kungbim + 4 + 4 很给力!
crackvip + 8 + 8 很给力!
逍遥枷锁 + 4 + 4 赞一个!
lucky_789 + 8 + 8 很给力!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2015-1-4 14:34:27 | 显示全部楼层
    大家注意,VS不同,设置也会有所不同!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-7-25 19:18
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2016-7-5 23:53:57 | 显示全部楼层
    还有一种方法,可以使用intel的编译器,安装在vs2008之类中,可以编译64位内联汇编,
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-31 02:55
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-1-1 06:49:17 | 显示全部楼层
    非常有用和帮助
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2020-1-9 10:13
  • 签到天数: 136 天

    [LV.7]常住居民III

    发表于 2019-5-17 13:07:47 | 显示全部楼层
    楼主这个只针对vs2008吗
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表