70,024
社区成员




#include <stdio.h>
void dayin(int *p,int m)
{
int g = 3;
g++;
printf("%d",*p);
printf("%d",m);
}
int main(void)
{
int *a = NULL;
int b = 1;
if (1 == b)
{
int c = 5;
a = &c;
}
int f = 7;
int g = 9;
dayin(a,g);
}
#include <stdio.h>
void dayin(int *p,int m)
{
00A613B0 push ebp
00A613B1 mov ebp,esp
00A613B3 sub esp,0CCh
00A613B9 push ebx
00A613BA push esi
00A613BB push edi
00A613BC lea edi,[ebp-0CCh]
00A613C2 mov ecx,33h
00A613C7 mov eax,0CCCCCCCCh
00A613CC rep stos dword ptr es:[edi]
int g = 3;
00A613CE mov dword ptr [g],3
g++;
00A613D5 mov eax,dword ptr [g]
00A613D8 add eax,1
00A613DB mov dword ptr [g],eax
printf("%d",*p);
00A613DE mov esi,esp
00A613E0 mov eax,dword ptr [p]
00A613E3 mov ecx,dword ptr [eax]
00A613E5 push ecx
00A613E6 push offset string "%d" (0A6573Ch)
00A613EB call dword ptr [__imp__printf (0A682BCh)]
00A613F1 add esp,8
00A613F4 cmp esi,esp
00A613F6 call @ILT+315(__RTC_CheckEsp) (0A61140h)
printf("%d",m);
00A613FB mov esi,esp
00A613FD mov eax,dword ptr [m]
00A61400 push eax
00A61401 push offset string "%d" (0A6573Ch)
00A61406 call dword ptr [__imp__printf (0A682BCh)]
00A6140C add esp,8
00A6140F cmp esi,esp
00A61411 call @ILT+315(__RTC_CheckEsp) (0A61140h)
}
00A61416 pop edi
00A61417 pop esi
00A61418 pop ebx
00A61419 add esp,0CCh
00A6141F cmp ebp,esp
00A61421 call @ILT+315(__RTC_CheckEsp) (0A61140h)
00A61426 mov esp,ebp
00A61428 pop ebp
00A61429 ret
--- 无源文件 -----------------------------------------------------------------------
00A6142A int 3
00A6142B int 3
00A6142C int 3
00A6142D int 3
00A6142E int 3
00A6142F int 3
00A61430 int 3
00A61431 int 3
00A61432 int 3
00A61433 int 3
00A61434 int 3
00A61435 int 3
00A61436 int 3
00A61437 int 3
00A61438 int 3
00A61439 int 3
00A6143A int 3
00A6143B int 3
00A6143C int 3
00A6143D int 3
00A6143E int 3
00A6143F int 3
00A61440 int 3
00A61441 int 3
00A61442 int 3
00A61443 int 3
00A61444 int 3
00A61445 int 3
00A61446 int 3
00A61447 int 3
00A61448 int 3
00A61449 int 3
00A6144A int 3
00A6144B int 3
00A6144C int 3
00A6144D int 3
00A6144E int 3
00A6144F int 3
--- f:\c++\exercise\exercise\exercise\main.cpp ---------------------------------
int main(void)
{
00A61450 push ebp
00A61451 mov ebp,esp
00A61453 sub esp,0FCh
00A61459 push ebx
00A6145A push esi
00A6145B push edi
00A6145C lea edi,[ebp-0FCh]
00A61462 mov ecx,3Fh
00A61467 mov eax,0CCCCCCCCh
00A6146C rep stos dword ptr es:[edi]
int *a = NULL;
00A6146E mov dword ptr [a],0
int b = 1;
00A61475 mov dword ptr [b],1
if (1 == b)
00A6147C cmp dword ptr [b],1
00A61480 jne main+3Fh (0A6148Fh)
{
int c = 5;
00A61482 mov dword ptr [c],5
a = &c;
00A61489 lea eax,[c]
00A6148C mov dword ptr [a],eax
}
int f = 7;
00A6148F mov dword ptr [f],7
int g = 9;
00A61496 mov dword ptr [g],9
dayin(a,g);
00A6149D mov eax,dword ptr [g]
00A614A0 push eax
00A614A1 mov ecx,dword ptr [a]
00A614A4 push ecx
00A614A5 call dayin (0A610E1h)
00A614AA add esp,8
}
00A614AD xor eax,eax
00A614AF push edx
00A614B0 mov ecx,ebp
00A614B2 push eax
00A614B3 lea edx,[ (0A614D4h)]
00A614B9 call @ILT+130(@_RTC_CheckStackVars@8) (0A61087h)
00A614BE pop eax
00A614BF pop edx
00A614C0 pop edi
00A614C1 pop esi
00A614C2 pop ebx
00A614C3 add esp,0FCh
00A614C9 cmp ebp,esp
00A614CB call @ILT+315(__RTC_CheckEsp) (0A61140h)
00A614D0 mov esp,ebp
00A614D2 pop ebp
00A614D3 ret
00A614D4 db 01h
00A614D5 db 00h
00A614D6 db 00h
00A614D7 db 00h
00A614D8 db dch
00A614D9 db 14h
00A614DA db a6h
00A614DB db 00h
00A614DC db e0h
00A614DD db ffh
00A614DE db ffh
00A614DF db ffh
00A614E0 db 04h
00A614E1 db 00h
00A614E2 db 00h
00A614E3 db 00h
00A614E4 db e8h
00A614E5 db 14h
00A614E6 db a6h
00A614E7 db 00h
00A614E8 db 63h
00A614E9 db 00h
第一个问题,p是个指针,值即它的内容,就是它所指向的对象的地址
00A613E0 mov eax,dword ptr [p] ;//dword ptr [p] 是指针变量p 的的内容,
;//就是指针的值
; // 对于符号地址p, mov eax,dword ptr [p] 等价于mov eax,dword ptr p
00A613E3 mov ecx,dword ptr[eax];//指针p指向的内容,赋值给ecx;eax当作指针寄存器使用。
00A613E5 push ecx ;//ecx内容 压栈 ,实际就是push *p
00A613E6 push offset string "%d" (0A6573Ch) ;//格式化串(地址)压栈
00A613EB call dword ptr [__imp__printf (0A682BCh)] ;// 调用 printf
00A613F1 add esp,8 //清栈
#include <stdio.h>
int main()
{
int *a = NULL;
int b = 1;
if (1 == b)
{
int c = 5;
a = &c;
}
printf("%d\n",*a);
int f = 7;
int g = 9;
return 0;
}