内联汇编


求数组长度 LENGTH 数组名
求数组大小 SIZE 数组名
求数组类型大小 TYPE 数组名
内联汇编不可以使用db dw dq等… 只能使用_emit定义,且一次只能定义一个字节
例子:定义三个0x90字节

1
2
3
4
5
6
__asm {
_emit 0x90
_emit 0x90
_emit 0x90
mov eax, eax
}

裸函数

可以有局部变量,但是需要自己抬栈,否则会导致堆栈不平衡,使用宏 __LOCAL_SIZE ,这个宏会自动计算裸函数局部变量的大小。
例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
void fun()
{
int nValue = 0;

__asm {
push ebp
mov ebp, esp
sub esp, __LOCAL_SIZE
...
leave //mov esp, ebp pop ebp
retn 参数个数 * sizeof 参数类型
}
}