首页 > 其他 > 详细

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

时间:2020-07-13 14:13:45      阅读:50      评论:0      收藏:0      [点我收藏+]

函数调用约定

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

*栈的大小记录在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传参,而是直接使用寄存器传参。这样速度就比压栈传参更快。

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!