Należy koniecznie obejrzeć rejestry. Wiele przydatnych informacji o rejestrach jest w zwykłym zrzucie stosu. Należy potrenować czytanie pliku odwzorowania i oglądanie rejestrów, aby w trudnej sytuacji móc użyć tych technik do rozwiązania problemu.
Aby wygenerować plik odwzorowania, należy w Visual Studio wykonać podane czynności.
1. Z menu Project wybrać polecenie Settings.
2. Wyświetlić kartę „Link”.
3. Nacisnąć przycisk Generate mapfile.
W wierszu poleceń należy napisać polecenie:
/map:"plikpam.map"
jak to zrobić
Przeanalizowanie stosu wywołań pozwala zrozumieć, co robi nasz kod. Jest to bardzo trudne, więc zaczniemy najpierw od przeglądu konwencji wywołań i dopiero wtedy poznamy właściwą technikę.
Popatrzmy na kod dwóch funkcji. Pierwsza z nich, o nazwie Śledź, jest normalną funkcją języka C++ pobierającą dwa argumenty. Druga — ŚledźListaPar — pobiera zmienną liczbę argumentów.
//Konwencja thiscall dla funkcji składowej języka C++ 373: int Trace(int i, int i1)
374: {
00401840 push ebp
00401841 mov ebp.esp
00401843 sub esp.OCh
00401846 mov dword ptr [ebp~0Ch],ecx 375: int j=8;
00401849 mov dword ptr [j],8 376: int k=9;
00401850 mov dword ptr [k],9
377: m_i = i+j+k+i1;
00401857 0040185A 0040185D 00401860 00401863 00401866 378: return 00401868
mov eax,dword ptr [i] add eax,dword ptr Q] add eax,dword ptr [k] add eax,dword ptr [i1] mov ecx,dword ptr [this] mov dword ptr [ecx],eax i;
mov eax,dword ptr [i]