裸函数及常见的几种函数调用约定

一、什么是裸函数

void __declspec(naked) Function()
{
__asm 
     {
        ret
     }
}

编译器不对裸函数做任何操作,所以要自己写汇编代码
裸函数不能在mian()函数中使用

1、无参数无返回值的函数框架

裸函数及常见的几种函数调用约定_第1张图片

2、有参数有返回值的函数框架

裸函数及常见的几种函数调用约定_第2张图片

3、带局部变量的函数框架

裸函数及常见的几种函数调用约定_第3张图片

rep指令的目的是重复其上面的指令.ECX的值是重复的次数.
STOS指令的作用是将eax中的值拷贝到ES:EDI指向的地址.

二、常见的几种函数调用约定

裸函数及常见的几种函数调用约定_第4张图片

1、 __cdecl

使用堆栈传参数,并在函数外进行堆栈平衡

裸函数及常见的几种函数调用约定_第5张图片

2、 __stdcall

使用堆栈传参数,并在函数内进行堆栈平衡
裸函数及常见的几种函数调用约定_第6张图片

3、 __fastcall

使用寄存器传参数,不需要堆栈平衡
裸函数及常见的几种函数调用约定_第7张图片

注意:当__fastcall中参数过多时,使用寄存器和堆栈传参数,并在函数内进行堆栈平衡

裸函数及常见的几种函数调用约定_第8张图片

你可能感兴趣的:(reverse,的入门)