Техника защиты компакт-дисков от копирования



              

"Раскрутка" стека - часть 2


TESTCEDIT! 00401362()

MFC42! 6c2922ae()

MFC42! 6c298fc5()

MFC42! 6c292976()

MFC42! 6c291dcc()

MFC42! 6c291cea()

MFC42! 6c291c73()

MFC42! 6c291bfb()

MFC42! 6c291bba()

Листинг 8 содержимое окна Call Stacks отладчика Microsoft Visual Studio Debugger

Попробуем найти в стеке адреса 6C2922AEh и 6C298FC5h, соответствующие двум последним ступеням исполнения. Нажимаем <ATL>+<-6> для перехода в окно дампа и, воспользовавшись "горячей" комбинацией клавиш <Ctr> +<l-G> в качестве базового адреса отображения, выбираем "ESP". Прокручивая окно дампа вниз, мы обнаруживаем оба адреса возврата (в приведенном далеениже листинге 3.9 они выделены рамкой).:

Листинг 3.9. Содержимое стека после "раскрутки"

0012F488  0012FA64  0012FA64  004012FF ß 0040136F:ret 8 первый адрес возврата

0012F494  00000000  00000064  00403458 ß 00401328:pop esi

0012F4A0  FFFFFFFF  0012F4C4  6C291CEA

0012F4AC  00000019  00000000  6C32FAF0

0012F4B8  0012F4C0  0012FA64  01100059

0012F4C4  00320774  002F5788  00000000

0012F4D0  00320701  77E16383  004C1E20

0012F4DC  00320774  002F5788  00000000

0012F4E8  000003E8  0012FA64  004F8CD8

0012F4F4  0012F4DC  002F5788  0012F560

0012F500  77E61D49  6C2923D8  00403458 ß 0040132C:ret;

0012F50C  00000111  0012F540  6C2922AE ß6C29237E:pop ebx/pop ebp/ret 1Ch

0012F518  0012FA64  000003E8  00000000

0012F518  0012FA64  000003E8  00000000

0012F524  004012F0  00000000  0000000C

0012F530  00000000  00000000  0012FA64

0012F53C  000003E8  0012F564  6C298FC5

0012F548  000003E8  00000000  00000000

0012F554  00000000  000003E8  0012FA64

Листинг 9 содержимое стека после раскрутки

Ячейки памяти, лежащие выше адресов возврата, представляют собой значения регистров, сохраненные в стеке при входе в функцию и восстанавливаемые при ее завершении. Ячейки памяти, лежащие ниже адресов возврата, "оккупированы" аргументами функции (если, конечно, у функции есть аргументы), или же принадлежат локальным переменным материнской функции, если дочерняя функция не принимает никаких аргументов.




Содержание  Назад  Вперед