汇编语言-内联汇编

也就是把汇编和C/C++合在一起

内联汇编

需要在指令前面添加汇编关键字

行内联汇编

_asm pushad;

_asm mov eax,0x12345678;

块内联汇编

_asm

{

Pushad;

Popad;

}

利用汇编来实现Windows的函数

在调用自带的函数的时候,直接call函数名就好了,因为函数名也是个地址,就是传参要自己处理

    //MessageBox(NULL, L"test", L"test", MB_OK);
char testTile[] = "test";
char testContext[] = "test";
_asm
{
push NULL;
lea eax, [testTile];
push ebx;
lea ebx, [testContext];
push ebx;
push 0;
call MessageBoxA;
}

裸函数

就是一个单纯的函数,内部什么也没有,只有自己写的在里面,没有编译器的添加

创建一个裸函数

void _declspec(naked) fun1()
{

}

需要这样的函数约定中调用,才在编译器中可以正常使用

例子

void _declspec(naked) fun1(char *temp)
{
_asm
{
push ebp;
mov ebp, esp;
sub esp, 0x30;

push 0;
push NULL;
mov eax, [ebp+0x8];
push eax;
push NULL;
call MessageBoxA;

add esp, 0x30;
pop ebp;
ret 0x4;
}

}