249: data
004013BD lea ecx,[ebp-10h]
004013C0 call @ILT+45(data
004013C5 mov dword ptr [ebp-4],0
250: data
004013CC lea ecx,[ebp-14h]
004013CF call @ILT+35(data
251: }
249: data
004013BD lea ecx,[ebp-10h]
004013C0 call @ILT+45(data
004013C5 mov dword ptr [ebp-4],0
250: data
004013CC lea ecx,[ebp-14h]
004013CF call @ILT+35(data
251: }
我们发现,第一个函数的call地址是0x00401032,第二个地址为0x00401028。但是这说明不了什么,因为第二个地址完全也可能是第一个模板类引申的。我们应该跟到每一个函数里面(其实这里的地址在VC下都是跳转地址)。
第一个变量的实际进入函数如下所示:
234: data() {printf("normal!\n");}
00401340 push ebp
00401341 mov ebp,esp
00401343 sub esp,44h
00401346 push ebx
00401347 push esi
00401348 push edi
00401349 push ecx
0040134A lea edi,[ebp-44h]
0040134D mov ecx,11h
00401352 mov eax,0CCCCCCCCh
00401357 rep stos dword ptr [edi]
00401359 pop ecx
0040135A mov dword ptr [ebp-4],ecx
0040135D push offset string "normal!\n" (0042607c)
00401362 call printf (00401540)
00401367 add esp,4
0040136A mov eax,dword ptr [ebp-4]
0040136D pop edi
0040136E pop esi
0040136F pop ebx
00401370 add esp,44h
00401373 cmp ebp,esp
00401375 call __chkesp (004023b0)
0040137A mov esp,ebp
0040137C pop ebp
0040137D ret
234: data() {printf("normal!\n");}
00401340 push ebp
00401341 mov ebp,esp
00401343 sub esp,44h
00401346 push ebx
00401347 push esi
00401348 push edi
00401349 push ecx
0040134A lea edi,[ebp-44h]
0040134D mov ecx,11h
00401352 mov eax,0CCCCCCCCh
00401357 rep stos dword ptr [edi]
00401359 pop ecx
0040135A mov dword ptr [ebp-4],ecx
0040135D push offset string "normal!\n" (0042607c)
00401362 call printf (00401540)
00401367 add esp,4
0040136A mov eax,dword ptr [ebp-4]
0040136D pop edi
0040136E pop esi
0040136F pop ebx
00401370 add esp,44h
00401373 cmp ebp,esp
00401375 call __chkesp (004023b0)
0040137A mov esp,ebp
0040137C pop ebp
0040137D ret
那么,第二个变量呢,同样需要跟入函数:
242: data() {printf("point!\n");}
00401430 push ebp
00401431 mov ebp,esp
00401433 sub esp,44h
00401436 push ebx
00401437 push esi
00401438 push edi
00401439 push ecx
0040143A lea edi,[ebp-44h]
0040143D mov ecx,11h
00401442 mov eax,0CCCCCCCCh
00401447 rep stos dword ptr [edi]
00401449 pop ecx
0040144A mov dword ptr [ebp-4],ecx
0040144D push offset string "point!\n" (00426074)
00401452 call printf (00401540)
00401457 add esp,4
0040145A mov eax,dword ptr [ebp-4]
0040145D pop edi
0040145E pop