码迷,mamicode.com
首页 > 其他好文 > 详细

逆向工程核心原理——第十章

时间:2020-07-13 13:57:10      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:使用   ret   c语言   a+b   通过   api   工程   fast   cdecl   

函数调用约定

函数调用约定,就是函数调用时如何传递参数的一种约定。

*栈的大小记录在pe头中。

主要的函数调用约定如下:

cdecl

stdcall

fastcall

1.cdecl

cdecl主要是C语言中使用的方式,调用者负责处理栈。

这里书本上给了一段代码:

#include<stdio.h>
int add(int a, int b)
{
	return (a+b);
}

int main()
{
	return add(1,2);
}

编译后放进OD查看函数调用:

技术图片

这种通过push指令将值压入栈中传递参数的方法,就是cdecl。

2.stdcall

stdcall这种方式常常用于Win32 API,这种方式由被调用者清理栈。

还是利用书上的代码:

#include<stdio.h>
int _stdcall add(int a, int b)
{
	return (a+b);
}

int main()
{
	return add(1,2);
}

还是使用OD工具查看:

技术图片

我们看到与上面cdecl相比,缺少了一条关闭栈区的指令。因为stdcll是被调用者清理栈。

3.fastcall

fastcall与前面两个不一样的地方就是,fastcall不会使用push传参,而是直接使用寄存器传参。这样速度就比压栈传参更快。

逆向工程核心原理——第十章

标签:使用   ret   c语言   a+b   通过   api   工程   fast   cdecl   

原文地址:https://www.cnblogs.com/lex-shoukaku/p/13292515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!