首页
论坛
课程
招聘
编译64位程序时使用汇编的方法总结
2021-11-5 13:15 19606

编译64位程序时使用汇编的方法总结

2021-11-5 13:15
19606

前言

目前在科锐学习3阶段已经尾声,这一年多来不仅仅是正向、逆向能力的提升,同时在对问题查找答案的方法上也有了很大的进步。
在32位程序开发中可以很方便的使用内联汇编(_asm、_asm{}),随着时代的发展,64位程序开发的需求也逐渐增多。但很遗憾微软并不想让我们在64位程序中随随便便(像原来一样)的用内联汇编。
今天正在做作业,64位的ARK工具,一些功能使用汇编(比如屏蔽中断、恢复、拿CR4)更为方便,结合老师的讲解以及网络查询的资料,做一下整理。

文中所用的环境

1
2
win10 20H2(19042.928)
Visual Studio 2019(16.11.5)

64位程序开发中使用汇编的两(三)种方法

第一种:通过添加obj文件

编写汇编代码。

通过ml64编译得到obj

1
ml64 /c MyAdd.asm

/c是只编译不链接,钱老师n久之前讲过的知识。

把obj文件添加(拖拽)到工程

测试使用汇编中的函数

第二种:联合编译

联合编译的方法1

添加.asm文件到工程

对添加的.asm文件属性做设置

默认添加的是不参与生成的,需要手动设置一下


选择自定义生成工具后点击应用,会出现新的选项。


在“自定义生成工具”中设置“命令行”和“输出文件”。

1
2
3
4
//命令行栏 内容
ml64 /c %(fileName).asm
//输入栏 内容
%(fileName).obj;%(Outputs)

输入完毕点击确定,然后编译工程测试下,会看到输出了 .obj文件。

测试使用汇编中的函数

声明.asm中的函数并编写测试代码使用它。

测试结果正常,当然还有一种类似的方法,更为简单

联合编译的方法2

修改工程生成依赖项

右键点击工程名,在弹出的菜单选择“生成依赖项”----> “生成自定义”

勾选 masm后确定

添加.asm文件编写代码,声明.asm中的函数,使用测试


这里可以在解决方案资源管理器里,右键选中添加的.asm文件,然后在弹出菜单中选择“属性”,查看下“项类型”是否为“Microsoft Macro Assembler”,如果不是,那需要手动设置下。一般情况下在添加了生成自定义,这时候是不需要自己再对文件设置了。

写在最后

我自己更倾向于最后一种方法,原因就是简单,之后再添加.asm文件不需要额外的设置了。哪里写的不对的请多多指正。
2021年11月5日13点14分


【公告】欢迎大家踊跃尝试高研班11月试题,挑战自己的极限!

收藏
点赞5
打赏
分享
最新回复 (15)
雪    币: 2144
活跃值: 活跃值 (936)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
pxhb 活跃值 2 2021-11-5 13:55
2
0
收藏备用
雪    币: 535
活跃值: 活跃值 (295)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xdlakx 活跃值 2021-11-5 15:14
3
0
收藏
雪    币: 398
活跃值: 活跃值 (436)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
曹操abc 活跃值 2021-11-5 18:02
4
0
13点14分
雪    币: 4154
活跃值: 活跃值 (905)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bluefish蓝鱼 活跃值 2021-11-5 19:29
5
0
收藏备用
雪    币: 6096
活跃值: 活跃值 (1955)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
v0id_ 活跃值 2021-11-6 19:16
6
0
mark
雪    币: 1297
活跃值: 活跃值 (1143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
~时光荏苒 活跃值 2021-11-6 20:10
7
2
还有一种方法使用英特尔编译器
雪    币: 3886
活跃值: 活跃值 (1663)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mudebug 活跃值 2021-11-7 00:04
8
0
怀念函数里直接嵌入汇编的日子
雪    币: 2516
活跃值: 活跃值 (554)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yoobaby 活跃值 2021-11-7 00:17
9
0
只用过最后一种。学习了!
雪    币: 3826
活跃值: 活跃值 (892)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
romobin 活跃值 2021-11-7 04:53
10
0
插眼收藏 感谢楼主 最近正被这问题困扰,非常及时
雪    币: 591
活跃值: 活跃值 (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
R0g 活跃值 2021-11-8 08:49
11
1
还有llvm编译器和intel编译器直接写内联汇编的方式没有介绍
雪    币: 5146
活跃值: 活跃值 (567)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
socky 活跃值 2021-11-10 17:40
12
0
收藏学习,共同进步
雪    币: 4112
活跃值: 活跃值 (1250)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunsjw 活跃值 1 2021-11-10 22:00
13
0
收藏学习,共同进步 
雪    币: 218
活跃值: 活跃值 (65)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaosawan 活跃值 2021-11-11 15:00
14
0
收藏
雪    币: 3204
活跃值: 活跃值 (925)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
htpidk 活跃值 2021-11-11 18:54
15
0
学习到了,平时用的第二种
雪    币: 4544
活跃值: 活跃值 (479)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Bayerischen 活跃值 2021-11-18 23:19
16
0
clang支持内联64位汇编的
游客
登录 | 注册 方可回帖
返回