反汇编系列(三)——函数篇

本文探讨了汇编语言中的函数调用机制,包括call指令、enter/leave/ret系列指令的使用,并通过实例解析了__stdcall和__cdecl调用约定的区别。同时,分析了具有返回值的函数在堆栈中的处理方式。
摘要由CSDN通过智能技术生成

汇编中的函数调用我们需要着重讲述一下。一般我们用 call 发起调用,最后需要用 ret/retn/retf 来返回。我们逐个来看汇编中的函数调用。


1、相关指令

  • call  ADDRESS:
发起调用,根据 ADDRESS 的地址决定是发起段内调用还是段间调用。当是段内调用时,将 eip 入栈,然后 jmp 到 ADDRESS 处;当是段间调用时,将 cs、eip 依次入栈,然后 jmp 到 ADDRESS 处。
  • enter:
进行堆栈准备工作,将 ebp 原来的内容入栈,将当前 esp 存入 ebp。相当于:
push	ebp
mov		ebp,	esp
  • leave:
恢复堆栈,是 enter 指令的逆向操作,如你所想:
mov		esp,	ebp
pop		ebp
  • retn  [NUMBER]:
段内返回,不带 [] 内的 NUMBER 时,表示是无参的函数调用或者 __cdecl 调用约定,当有 NUMBER 时,返回后将 esp 的值加 NUMBER,表示将入栈的参数全部出栈,一般是 __stdcall 调用约定。作用如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值