Программа с именем 0xFF
В ДОСе, как может
Поэтому странно, что пробельных символов в ней два, один из них — обычный пробел с кодом 32, именно его операционная система считает пробелом, второй — с кодом 255, он выводится как пробел, но считается обычным символом.
Не помню, использовалось ли это свойство
А 255 символ запретили? 30 лет назад, еще под MSDOS, переименовали утилиту переворота экрана в 255 символ и вставили в autoexec.bat. Хозяин компа уже психовать начал и монитор переворачивать :)) Показали ему прикол…
Ну то есть переименовали программу так, чтобы её имя выглядело как пробельный символ и добавили её в скрипт автозагрузки. Хозяин компьютера, видимо, проверял скрипт, ничего не находил и не понимал что происходит.
Мне стало интересно проверить — действительно ли это работает? Благо ДОС можно сейчас запустить даже в браузере.
Тут надо пояснить, что «настоящий» пробел для этого не годится — ДОС просто не распознает его в автозагрузке как имя файла для запуска.
Я не знаю как раньше вводили символ с кодом 255 в командную строку, поэтому просто набросал программу на ассемблере, которая переименовывает файл mem.exe (которая обычно есть в составе ДОСа) в .com:
org 100h
section .data
oldName db 'MEM.EXE', 0
newName db 255, '.COM', 0
section .text
global _start
_start:
mov ah, 56h
lea dx, oldName
lea di, newName
int 21h
mov ax, 4C00h
int 21hНеобходимое пояснение: расширение обязательно, иначе ДОС не поймёт, что файл запускаемый. При запуске его можно не указывать — операционка догадается сама что именно подставить.
На следующем шаге я скомпилировал программу у себя прямо в «МакОСи» и вывел в шестнадцатеричном виде:
$ hexdump -C <(nasm -f bin rename.asm -o /dev/stdout)
00000000 b4 56 8d 16 14 01 8d 3e 1c 01 cd 21 b8 00 4c cd |.V.....>...!..L.|
00000010 21 00 00 00 4d 45 4d 2e 45 58 45 00 ff 2e 43 4f |!...MEM.EXE...CO|
00000020 4d 00 |M.|
00000022Далее набрал её в кодах при помощи команды DEBUG и запустил. В текущей директории появилась программа с нужным именем:
Для последнего шага мне нужно было
Попробовал запустить, сработало!
Комментарии 8
Шёл 2к24, перфокарты всё ещё не изобрели.
Это работает и для других символов.