Alex72
Гость
|
|
« : 12-01-2006 13:33 » |
|
Здравствуйте! Объясните мне, пожалуйста, почему вот этот код работает некорректно (хотя, по идее, должен). ... mov eax,esp mov esp,00h pop ebx mov esp,eax ... ret Под отладчиками понятно, он и должен их подвешивать (они пользуются стеком отлаживамой программы? Хотя я думал, что под Win это не так), но вот почему без отладчика он не работает (хотя вроде-бы должен)? Стек ведь здесь не используется. Все это дело под WinXP.
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #1 : 12-01-2006 13:38 » |
|
pop ebx ... Стек ведь здесь не используется. А как можно сделать pop без использования стека?
|
|
|
Записан
|
|
|
|
Alex72
Гость
|
|
« Ответ #2 : 12-01-2006 15:46 » |
|
В ebx, я думаю, просто будет мусор, но он и не нужен. Процесс не валится, он просто завершается, без каких-либо сообщений, а вот команды до инструкции ret (или exitprocess) не выполняются. Под DOS этот код работает совершенно корректно.
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #3 : 12-01-2006 21:22 » |
|
Под DOS можно вообще делать любые безобразия, поскольку процессор находится в реальном режиме (если, конечно, это не старшие версии DR-DOS или же MS-DOS с добавленными продуктами Quarterdesq, которые, наверное, сейчас уже прочно позабыты). В защищенном же режиме процессора накладывается масса ограничений, в том числе на доступ к младшим адресам оперативной памяти (это помогает отлавливать неинициализированные указатели, в которых обычно сидит 0).
В чем смысл приведенного фрагмента? Я его не увидел.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #4 : 12-01-2006 21:28 » |
|
Конкретно, ужасно интересно - нафиг pop? Полезной информации он не дает, а другого смысла в нем нет.
Если ты делаешь какую-то программу защиты, то знай, что в защищеном режиме отладчики могут все. Но, можно операться на real-time процессы, происходящие в железе, которые съэмулировать сложно или очень сложно.
|
|
« Последнее редактирование: 12-01-2006 21:31 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #5 : 12-01-2006 21:29 » |
|
Если до pop не было никаких push. То он считает адрес возврата. И при этом ret будет возврашать совсем в другое место. Старый хакерский прием по зашите программ.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #6 : 12-01-2006 21:31 » |
|
Finch, mov esp, 0 !!!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #7 : 12-01-2006 22:02 » |
|
Опс не заметил.
Если прога в виртуально-реальном режиме, то стек должен работать в связке SS:SP. Стэк работает по ниспадаюшей. Значит при pop должно произойти переполнение стэка. Тут варианты. Либо прога валится с подвесом. Либо винда сама валит.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Scorp__)
Молодой специалист
Offline
Пол:
|
|
« Ответ #8 : 13-01-2006 10:17 » |
|
Эээ, а процессор случайно не новый? Тогда все дело в может оказаться в XD-бите, который XP поддерживает со второго SP.
|
|
|
Записан
|
- А Вы сами-то верите в привидения? - Конечно, нет, - ответил лектор и медленно растаял в воздухе.
|
|
|
|