(по статье Криса Касперски "Практические советы по восстановлению системы в боевых условиях")
1. Окно "Call Stack" (Debug\Windows\Call Stack, или Ctrl+Alt+C) позволяет просматривать историю вызовов функций. Выглядит это окно так:
TestCEDIT.exe!00401362()
TestCEDIT.exe!004012ff()
mfc42.dll!6c3739e5()
USER32.DLL!77e1652a()
mfc42.dll!6c3723d8()
mfc42.dll!6c3722ae()
mfc42.dll!6c378fc5()
mfc42.dll!6c372976()
mfc42.dll!6c3739e5()
USER32.DLL!77e21bc7()
USER32.DLL!77e1544f()
mfc42.dll!6c371dcc()
USER32.DLL!77e24e1d()
USER32.DLL!77e24be8()
mfc42.dll!6c371cea()
mfc42.dll!6c371c73()
mfc42.dll!6c371018()
Каждая строка указывает на модуль и помещённое в стек значение адреса в этом модуле (точка возврата из вызова call). Если щёлкать мышкой на каждую строку, то попадаем в окне Disassembly на адрес в указанном модуле, причём перед указанной точкой возврата ВСЕГДА стоит команда call ... (то есть, это и есть история вызовов call, хранящаяся в стеке). Исключение составляет первая строка (TestCEDIT.exe!00401362()), в которой адрес 00401362 всего лишь равен текущему значению регистра указателя стека EIP.
2. Чтобы посмотреть дамп самого стека, с котором лежат все адреса списка Call Stack вперемежку с передаваемыми через стек параметрами, нужно ввести в поле Address дампа слово ESP (для удобства просмотра параметров в стеке лучше дамп переключить в режим 4-byte Integer, это делается в контекстном меню окна дампа) и нажать на Enter. В поле Address автоматически подставляется значение регистра ESP и окно дампа начинает показ памяти с этого адреса. При внимательном просмотре дампа обнаруживается, что там действительно есть все адреса из окна истории вызовов Call Stack.
3.
0049434A mov al,byte ptr [outKEYSpnt (5E60B9h)]
означает - инструкция находится по адресу 0x0049434A, и задает загрузить в al (четвертинка от EAX, половинка от AX, разрядность 1 байт) значение переменной outKEYSpnt, которая находится по адресу 5E60B9h.
|