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