逆向工程——(2)

1. 函数调用

    主要解决的问题是函数调用后如何处理esp

    主要函数调用约定:cdecl、stdcall、fastcall

    1.1. cdecl:主要在c语言中使用的方式,调用者负责处理栈

           以add()函数为例,在 call命令调用add()函数后,可以看到add esp,8命令来整理栈。调用者main()直接清理其压入栈的函数参数

   1.2. stdcall: 常用于Win32 API,该方式由被调用者清理栈,由于c语言默认使用的方式为cdecl,所以要用 int _stdcall add(int a,int b)来使用stdcall方式

          调试后可以看到main()在调用add()后,省略了清理栈的代码(add esp,8),栈的清理工作由add()函数最后的retn 8命令来执行的,retn 8的含义是retn+pop 8字节,返回后使esp增加指定大小

1.3. fastcall:该方式通常会用寄存器(非栈内存)去传递那些需要传递给函数的部分参数。比如函数有四个参数,则前两个分别使用ecx,edx寄存器传递

 

       

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值