VS2015 使用 yasm

最近做一个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 … Read More

ASM基础-汇编标识位

X86架构CPU的状态标识位有以下的几个:

CF:反映无符号运算是否产生进位或借位,是则CF=1,否则CF=0。
PF:反映运算结果低8位中1的个数,1的个数为偶数,则PF=1,否则PF=0。
AF:在字节操作时低半字节向高半字节进位或借位时,字操作时低字节向高字节进位或借位时,AF=1,否则AF=0。
ZF:反映运算结果是否为0,结果为0时ZF=1,否则ZF=0。
SF:反映运算结果是否为负,结果为负时SF=1,否则SF=0。
OF:反映有符号运算结果是否溢出,结果溢出时OF=1,否则OF=0。
IF:中断标志。

CF 是对于无符号数来讲, 运算过程中(看的是运算过程, 不关心结果)如果有进位(Add)或有借位(Sub)则 CF=1, 否则CF=0
对于加法相信很好理解, 我们来看看减法:
label1: mov eax, 2
cmp eax, 5
jc label1
上面的示例中, cmp 执行的是 eax - 5, 因为eax < 5 所以需要借位, 于是CF=1 JC 满足跳转到label1
所以 cmp R1, R2 与 JC结合, 判断的是 R1 … Read More