最近做一个64位下的Hook, VS在64位下没有了内联汇编
于是来体验一下 yasm 编译 asm 文件, 首先从 yasm 官网下载 vs专用包, 普通版的不能在vs中直接调用

下载地址如下:
Win32 VS2010 (for use with VS2010+ on 32-bit Windows)
Win64 VS2010 (for use with VS2010+ on 64-bit Windows)

虽然写的是 2010没有更新过, 实际上可以在VS2015中直接使用.
下载相应的包. 将   vsyasm.props   vsyasm.targets  vsyasm.xml
三个文件放在
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations

将 vsyasm.exe 放在
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

在工程中使用 yasm的方法

在  项目名字->右键->生成依赖项->生成自定义,打勾vsyasm。

然后,在.asm文件,右键 ,属性->常规->项类型里面选择Yasm Assembler, 确定即可.

下面给出一段示例代码:

; 导出符号给外部使用
global StubFunc
global CheckFunc
global retaddr

; 导入外部符号
extern retaddr2

section .data  ; 在masm中是  .data 没有section修饰
	szStr:     db "success ",10,10,0
	msglen:    equ $-szStr-1
	retaddr:   dq 0


section .text  ;

StubFunc:
	mov rdx, qword szStr
	mov rdi, rdx
	mov rbx, rcx
	mov rax, [qword retaddr]
	mov r8d, msglen
	mov [rsp+20h], r8d
	jmp rax


CheckFunc:
	mov dword [rcx+3Ch], 1h		;isReged
	mov dword [rcx+30h], 999	;用户数
	mov dword [rcx+2Ch], 0		;注册类型, 1 Site
	mov rax, [qword retaddr2]
	mov rbx, rax
	mov eax, 0DBh
	jmp rbx

转载请注明转自: 听风 , 本文固定链接: VS2015 使用 yasm