逆向工程核心原理——第十章
Posted lex-shoukaku
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆向工程核心原理——第十章相关的知识,希望对你有一定的参考价值。
函数调用约定
函数调用约定,就是函数调用时如何传递参数的一种约定。
*栈的大小记录在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传参,而是直接使用寄存器传参。这样速度就比压栈传参更快。
以上是关于逆向工程核心原理——第十章的主要内容,如果未能解决你的问题,请参考以下文章