Code:
#include<iostream>
//global variable
int g_One=1;
//function prototype
void func(int& pInt);
int main()
{
int nvar=2;
int* pvar=&nvar;
func(*pvar);
std::cout<<*pvar<<std::endl;
return 0;
}
void func(int& pInt)
{
pInt=g_One;
}
#include<iostream>
//global variable
int g_One=1;
//function prototype
void func(int& pInt);
int main()
{
int nvar=2;
int* pvar=&nvar;
func(*pvar);
std::cout<<*pvar<<std::endl;
return 0;
}
void func(int& pInt)
{
pInt=g_One;
}
U disassembly-u za func funkciju dobijem sledeci assembly code
Code:
void func(int& pInt)
{
004114F0 push ebp
004114F1 mov ebp,esp
004114F3 sub esp,0C0h
004114F9 push ebx
004114FA push esi
004114FB push edi
004114FC lea edi,[ebp-0C0h]
00411502 mov ecx,30h
00411507 mov eax,0CCCCCCCCh
0041150C rep stos dword ptr es:[edi]
pInt=g_One;
0041150E mov eax,dword ptr [pInt]
00411511 mov ecx,dword ptr [g_One (417004h)]
00411517 mov dword ptr [eax],ecx
}
void func(int& pInt)
{
004114F0 push ebp
004114F1 mov ebp,esp
004114F3 sub esp,0C0h
004114F9 push ebx
004114FA push esi
004114FB push edi
004114FC lea edi,[ebp-0C0h]
00411502 mov ecx,30h
00411507 mov eax,0CCCCCCCCh
0041150C rep stos dword ptr es:[edi]
pInt=g_One;
0041150E mov eax,dword ptr [pInt]
00411511 mov ecx,dword ptr [g_One (417004h)]
00411517 mov dword ptr [eax],ecx
}
Muci me sledeca linija
Code:
mov eax,dword ptr [pInt]
mov eax,dword ptr [pInt]
U mom slucaju adresa pInt je na lokaciji 0x0012ff60 a vrednost sledeca 4 bajta sa te lokacije je 2. Kada se izvrsi
mov instrukcija u registru eax se nalazi vrednost 0x0012ff60 a ne 2. Zasto?