C代码:
int *p[3]; //定义指针数组
int i1 = 3;
int i2 = 4;
int i3 = 5;
p[0] = &i1; //取i1地址 放入数组下标0中
p[1] = &i2;
p[2] = &i3;
printf("p[0]:%d\n",*p[0]); //输出数组下标0里的指针 指向的内容
printf("p[1]:%d\n",*p[1]);
printf("p[2]:%d\n",*p[2]);
反汇编:
int *p[3];
int i1 = 3;
0041358E mov dword ptr [i1],3 //放入i1地址指向的位置中
int i2 = 4;
00413595 mov dword ptr [i2],4
int i3 = 5;
0041359C mov dword ptr [i3],5
p[0] = &i1;
004135A3 lea eax,[i1] //取i1的地址
004135A6 mov dword ptr [p],eax //取i1的地址放入数组下标0中
p[1] = &i2;
004135A9 lea eax,[i2]
004135AC mov dword ptr [ebp-0Ch],eax
p[2] = &i3;
004135AF lea eax,[i3]
004135B2 mov dword ptr [ebp-8],eax
printf("p[0]:%d\n",*p[0]);
004135B5 mov esi,esp
004135B7 mov eax,dword ptr [p]
004135BA mov ecx,dword ptr [eax]
004135BC push ecx
004135BD push offset string "p[0]:%d\n" (4158ACh)
004135C2 call dword ptr [__imp__printf (4182B8h)]
004135C8 add esp,8
004135CB cmp esi,esp
004135CD call @ILT+300(__RTC_CheckEsp) (411131h)
printf("p[1]:%d\n",*p[1]);
004135D2 mov esi,esp
004135D4 mov eax,dword ptr [ebp-0Ch]
004135D7 mov ecx,dword ptr [eax]
004135D9 push ecx
004135DA push offset string "p[1]:%d\n" (4158A0h)
004135DF call dword ptr [__imp__printf (4182B8h)]
004135E5 add esp,8
004135E8 cmp esi,esp
004135EA call @ILT+300(__RTC_CheckEsp) (411131h)
printf("p[2]:%d\n",*p[2]);
004135EF mov esi,esp
004135F1 mov eax,dword ptr [ebp-8]
004135F4 mov ecx,dword ptr [eax]
004135F6 push ecx
004135F7 push offset string "p[2]:%d\n" (4156B0h)
004135FC call dword ptr [__imp__printf (4182B8h)]
00413602 add esp,8
00413605 cmp esi,esp
00413607 call @ILT+300(__RTC_CheckEsp) (411131h)
内存显示:
0x0012FF58 4c ff 12 00 40 ff 12 00 34 ff 12 00 cc cc cc cc b8 ff 12FF4C数组下标0地址里面值为3,12FF40 数组下标1地址里面值为4,12FF34 数组下标2地址里面值为5