《软件调试分析技术》学习笔记(十)

本文通过学习《软件调试分析技术》,探讨了程序设计语言中的函数概念,将其与数学函数进行对比,并详细解释了在汇编语言中如何使用call和retn指令进行函数调用和返回。以C语言代码为例,展示了编译后的汇编代码,并利用调试工具分析了函数调用过程中的栈操作,揭示了函数返回地址的保存和恢复机制。
摘要由CSDN通过智能技术生成
函数调用 

    许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是程序中的函数(也被称为过程)。其实程序中的函数和数学中所说的函数是很相似的,都是通过输入自变量(有些函数可能不需要自变量),然后经过一系列的运算,最后得出函数的值。 

    在汇编语言中对于函数的调用一般用一个call指令来完成,当过程返回时用retn指令来完成。call指令有一个操作数,指向被调用过程的地址,当程序需要调用一个过程的时候,程序会跳转到被调用过程的地址处去执行代码。当过程代码执行完毕的时候,程序需要返回到原调用地址处,这个时候就需要使用到retn指令。retn指令是没有操作数的,那么程序怎么知道函数要返回的原调用处的地址?显然,在调用一个过程的时候应该保存返回的原调用处的地址,具体怎么操作,先看一段C语言代码: 

#include <stdio.h> 
void function() 
{ 
  return; 
} 
int main() 
{ 
  function(); 
  return 0; 
}

这里定义了一个空函数function(),然后在主函数里调用了这个空函数function(),这里需要修
改一下编译器的选项,在对语言的优化处理中把对内联函数展开的选项修改为“只使用
__inline”,如图2.3.1.1,

否则编译器会把代码比较少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值