Создайте файл в блокноте под названием bugaga и запишите в него текст bugaga. Сохраните его и замените расширений на exe. Запустите. Посмотрите что происходит.
Что бы не мучатся выкладываю файл.
Windows даже и не пытается запустить exe, содержимое которых не начинается на "MZ".
[Window Title]
C:\Users\Администратор\Desktop\bugaga\bugaga.exe
[Content]
Версия этого файла несовместима с используемой версией Windows. С помощью сведений о системе определите необходимую версию программы (32- или 64-разрядную) и обратитесь к издателю программного обеспечения.
[ОК]
а выдаёт сообщение
Shkolnik писал(а):Не знаю.
Запускаем программу notepad.exe, пишем текст: bugaga. Сохраняем документ как bugaga.exe и запускаем. Открывается консольное окно, в котором ничего не происходит, висит курсор и все. Возвращаемся в файл-менеджер (Проводник) и запускаем еще раз. Во втором окне курсор скачет по всему окну, а в первом курсор пропадает вообще. Если теперь переключиться на первое окно, то курсор начнет бегать в нем, а во втором исчезнет. Компьютер при этом начинает заметно тормозить (программа грузит процессор на все 100%). Если на компьютере имеется LPT-принтер, на него вываливаются пустые страницы.
Берем дизассемблер, вводим в него этот файл, открываем. Получаем такую программу (слева команды, справа коды):
- Код: Выделить всё
627567h | bound si,[di+67h]
61h | popa
6761h | popa
команда bound:
Действие: сравнить значение в 16/32-разрядном регистре индекс с диапазоном значений, первое из которых - это нижний индекс, второе - верхний индекс плюс размер операнда в байтах. Значение нижнего и верхнего индексов расположены последовательно в двух ячейках памяти размером слово/двойное слов, адресуемых операндом границы_массива. Структура границы_массива помещается обычно непосредственно перед массивом, позволяя его адресовать. Если значение индекса вышло за пределы указанного диапазона значений, то возбуждается прерывание с номером 5, если нет - программа продолжает выполняться.
В данном конкретном случае отладчик показывает si=0 di=0 [di+67h]=20h [di+69h]=0 что вызовет прерывание.
Достаточно написать b и любую букву, и курсор начнет скакать. Так же выяснилось, что удерживание клавиши ctrl увеличивает скорость перемещения курсора. Еще эксперименты показали - достаточно символа b для подвисания консольки и рандомного перемещения курсора. Windows, запуская exe видит, что exe не соответствует формату и запускает его как com, которому, никакой формат заголовка не нужен. Однако нормальное поведение com'а - это дойти до конца и завершится, а не гадить на принтер, а тут оно зацикливается. От одной буквы! От hex-кода 62.
Рассмотрев повнимательнее "рандомно скачущий курсор" и поведение матричного принтера - программа выкидывает ВО ВСЕ ВЫХОДНЫЕ ПОТОКИ пустые строки в случае с "b", а в случае с "bu" что-то типа tab'ов. Курсор скачет просто от того, что консоль Windows подтормаживает от такого количества информации и поэтому двигает курсор рывками. А принтер пробелы не печатает, а просто двигает головку. То есть в случае с b - двигают понемногу, поэтому, бумага перемещается медленно, а с bu – помногу.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14