это значение регистра ESI, который
Листинг 11 адрес возврата из праматеринской функции
Первое двойное слово –— это значение регистра ESI, который нам предстоит вручную восстановить; второе –— адрес возврата из функции. Нажатием <Ctrl>+<-G>, "0x6C2923D8" мы продолжаем "раскручивать" стек (листинг 3.12).:
Листинг 3.12. Дизассемблерный листинг прапраматеринской функции
6C2923D8 jmp 6C29237B
…
6C29237B mov eax,ebx
6C29237D pop esi
6C29237E pop ebx
6C29237F pop ebp
6C292380 ret 1Ch
Листинг 12 дизассемблерный листинг пра-праматеринской функции
Вот мы и добрались до восстановления регистров! Сместившись на одно двойное слово вправо (оно только что было вытолкнуто из стека командой RET), переходим в окно "Registers" и восстанавливаем регистры ESI, EBX, EBP, извлекая сохраненные значения из стека (листинг 3.13).:
Листинг 3.13. Содержимое регистров, ранее сохраненных в стеке вместе с адресом возврата
0012F500 77E61D49 6C2923D8 00403458
ß
6C29237D:pop esi
0012F50C 00000111 0012F540 6C2922AE ß6C29237E:pop ebx/pop ebp/ret 1Ch
Листинг 13 содержимое регистров, ранее сохраненных в стеке вместе с адресом возврата
Как вариант можно переместить регистр EIP на адрес 6C29237Dh, а регистр ESP на адрес 12F508h, после чего нажать на клавишу <F5> для продолжения выполнения программы. И этот прием действительно срабатывает! Причем, реанимированная программа уже "не ругается" на ошибку последней операции (как это было при восстановлении путем принудительного выхода из функции), а просто ее не выполняет. Красота!
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий