从底层分析C语言中的参数传递与返回值

本文详细分析了C语言中参数传递和返回值的底层原理,通过具体的函数调用示例,展示了从堆栈变化到寄存器操作的全过程。使用VC6.0观察寄存器和汇编指令,揭示了参数从右向左通过push传递,函数调用用call指令,返回值存储在EAX寄存器中,最后通过堆栈平衡恢复堆栈状态。
摘要由CSDN通过智能技术生成

使用到的工具

  • VC6.0(观察寄存器变化)
  • Excel(画堆栈图)

函数定义

函数定义的格式如下:

返回类型 函数名(参数列表)
{
	功能

	return;
}

例子:

int plus(int,x int,y)
{
   

	return x+y;
}

int代表的是字节宽度,除int外,还有两个常使用的变量类型

变量类型 数据宽度
int 4个字节
short 2个字节
char 1个字节

画堆栈图

int plus(x,y)
{
   
	return x+y;
}

void main()		//程序入口
{
   
	plus(1,2);	//函数调用

	return;		//执行结束
}

就从上面这个程序来说,它究竟是怎么执行的呢?我们下个断点,追一下程序内存的变化,就像这样:
在这里插入图片描述
这里一定要记住两个寄存器的变化,一个是ESP栈顶寄存器,一个是EBP栈底寄存器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值