История №283069
Пишу для тех, кто еще не знает.
Итак, берем Блокнот, пишем текст: bugaga
Сохраняем как bugaga.exe и запускаем. Открывается консольное окно, в
котором ничего не происходит, висит курсор и все.
Возвращаемся в файл-менеджер (или Проводник) и запускаем еще раз. Во
втором окне курсор скачет по всему окну, а в первом курсор пропадает
вообще. Если теперь переключиться на первое окно, то курсор начнет
бегать в нем, а во втором исчезнет.
Берем дизассемблер, вводим в него этот файл открываем.
Получаем такую программу (слева команды, справа коды):
bound si, [di+0067] 62 75 67
pop a 61
db 67 67
pop a 61
Я к сожалению не помню Ассемблер, поэтому не могу сказать, что делает
команда bound, и что делает вся программа, но знаю, что si - это индекс
сегмента, di - индекс данных, pop a - команда поместить данные из стека
в аккумулятор, а db - это просто байт данных, который ничего не делает.
Может, здесь найдутся программеры на Ассемблере, которые дополнят
картину и объяснят работу этой программы?
ТруЪ• 04.05.08 20:25
Все зависит от содержимого оперативной памяти (если говорить о винде, то это содержимое образа, загружаемого NTVDM, т.к. это DOS-программа типа COM, хотя и с расширением EXE (отсутствует магическое число MZ)). Инструкция pop a смещает верхушку стека (а следовательно и адрес возврата), затем идет неизвестная инструкция, которая вызывает прерывание 6 (unknown exception). Об эффекте ничего сказать не могу, прыгание курсора возможно вызвано программными int 33h с параметрами переноса курсора. А зависание - это определенно 100% нагрузка на процессор (чего же еще может натворить NTVDM?), причем, скорее всего, одноядерный. Что касается UNIX, там совсем другая организация устройств, там такая прога будет работать только от root (иначе наступит полный SIGSEGV или чего-то еще).