汇编分析参数传递中的地址传递与值传递的区别(指针,引用,值传递)

void mySwap( int  a , int  b )
{
	int tmp ;
	tmp = a ;
	a = b ;
	b = tmp ;
}

int main(int argc, char* argv[])
{
	int a = 1 ;
	int b = 2 ;

	mySwap( a , b ) ;

	return 0;
}


void mySwap( int * a , int * b )
{
	int tmp ;
	tmp = *a ; 
	*a = *b ;
	*b = tmp ;
}

int main(int argc, char* argv[])
{
	int a = 1 ;
	int b = 2 ;

	mySwap( &a , &b ) ;

	return 0;
}


void mySwap( int & a , int & b )
{
	int tmp ;
	tmp = a ;
	a = b ;
	b = tmp ;
}

int main(int argc, char* argv[])
{
	int a = 1 ;
	int b = 2 ;

	mySwap( a , b ) ;

	return 0;
}

分析上面3段代码,我们来分析其编译后是上面情况,所以使用IDA反汇编来进行分析。


1.指针

.text:00401020 mySwap          proc near               ; CODE XREF: j_mySwapj
.text:00401020
.text:00401020 var_44          = byte ptr -44h
.text:00401020 var_4           = dword ptr -4
.text:00401020 arg_0           = dword ptr  8
.text:00401020 arg_4           = dword ptr  0Ch
.text:00401020
.text:00401020                 push    ebp
.text:00401021                 mov     ebp, esp
.text:00401023                 sub     esp, 44h
.text:00401026                 push    ebx
.text:00401027                 push    esi
.text:00401028                 push    edi
.text:00401029                 lea     edi, [ebp+var_44]
.text:0040102C                 mov     ecx, 11h
.text:00401031                 mov     eax, 0CCCCCCCCh
.text:00401036                 rep stosd
.text:00401038                 mov     eax, [ebp+arg_0]
.text:0040103B                 mov     ecx, [eax]
.text:0040103D                 mov     [ebp+var_4], ecx
.text:00401040                 mov     edx, [ebp+arg_0]
.text:00401043                 mov     eax, [ebp+arg_4]
.text:00401046                 mov     ecx, [eax]
.text:00401048                 mov     [edx], ecx
.text:0040104A                 mov     edx, [ebp+arg_4]
.text:0040104D                 mov    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值