Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Переполнение стека под отладчиком  (Прочитано 12289 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
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 Offline
Пол: Мужской

WWW
« Ответ #4 : 12-01-2006 21:28 » new

Конкретно, ужасно интересно - нафиг pop? Полезной информации он не дает, а другого смысла в нем нет.

Если ты делаешь какую-то программу защиты, то знай, что в защищеном режиме отладчики могут все. Но, можно операться на real-time процессы, происходящие в железе, которые съэмулировать сложно или очень сложно.
« Последнее редактирование: 12-01-2006 21:31 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 12-01-2006 21:29 » 

Если до pop не было никаких push. То он считает адрес возврата. И при этом ret будет возврашать совсем в другое место. Старый хакерский прием по зашите программ.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 12-01-2006 21:31 » 

Finch, mov esp, 0 !!!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 12-01-2006 22:02 » 

Опс не заметил.

Если прога в виртуально-реальном режиме, то стек должен работать в связке SS:SP. Стэк работает по ниспадаюшей. Значит при pop должно произойти переполнение стэка. Тут варианты. Либо прога валится с подвесом. Либо винда сама валит.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 13-01-2006 10:17 » 

Эээ, а процессор случайно не новый? Тогда все дело в может оказаться в XD-бите, который XP поддерживает со второго SP.
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines