汇编语言-内联汇编
也就是把汇编和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;
}
}