Visual Studio-X64汇编编写

纯64位汇编:

includelib ucrt.lib
includelib legacy_stdio_definitions.lib
includelib user32.lib

extern printf:proc
extern MessageBoxA:proc

.data
szFormat db "%s",0
szHello db "HelloWorld",0
szRk db "123",0

.code
start proc
	sub rsp,28h
	mov rdx,offset szHello
	mov rcx,offset szFormat
	call printf
	mov r9,0
	mov r8,offset szHello
	mov rdx,offset szRk
	mov rcx,0
	call MessageBoxA
	add rsp,28h
	ret
start endp
end 

注意:

1.平台工具集要选VS2015

2.属性->生成依赖项->masm

3.链接器->高级->入口点


64位混合编程(C++/Asm):一定要严格执行代码规范,不然各种报错

1.asm:
includelib legacy_stdio_definitions.lib
includelib user32.lib

extern printf:proc

.data
	szformat db "%s\n",0

.code
Myadd proc
	sub rsp,28h
	add rcx,rdx
	mov	rax,rcx
	add rsp,28h
	ret
Myadd endp

Myprintf proc
	sub rsp,28h
	mov rdx,rcx
	lea rcx,szformat
	call printf
	add rsp,28h
	ret
Myprintf endp
end 
main.cpp:
#include <iostream>
#include <windows.h>

EXTERN_C UINT64 Myadd(UINT64 a, UINT64 b); 
EXTERN_C void Myprintf(const char* szbuffer);

int main()
{
	UINT64 num = Myadd(1, 2);
	printf("%lld\r\n", num);
	Myprintf("hello word");
	system("pause");
	return 0;
}

注意:

如果生成报错,并且没有属性里面没有**Microsoft Macro Assembler,**换成VS2015也没有的话,

就在源文件里面找到.asm后缀的文件右键属性->常规->项类型->Microsoft Macro Assembler即可。

相关推荐
qq_5443291717 分钟前
需求6:如何写一个后端接口?
linux·服务器·windows
panxianzhan29 分钟前
VS开发 - 静态编译和动态编译的基础实践与混用
c语言·c++·windows·visual studio
小彰5 小时前
.Net 6.0 监听Windows网络状态切换
网络·windows·.net
△曉風殘月〆6 小时前
如何修改Nuget包的缓存路径
visual studio·nuget·nuget packages
sukalot7 小时前
windows C++-轻量级任务
开发语言·c++·windows
luming-0210 小时前
Windows11安装Docker Desktop教程
运维·windows·docker·容器·bug
Lordaeron_ESZ15 小时前
CSAPP Attack Lab
linux·汇编
xuanyu2218 小时前
【SOP】Windows下安装Neo4j流程
windows·neo4j
GEEKVIP20 小时前
如何从 Mac 上清空的垃圾箱中恢复已删除的文件
windows·macos·ios·智能手机·电脑·笔记本电脑·iphone