Вызов:
На выбранном вами языке программирования выключите машину, на которой выполнялся ваш код.
правила
- Нет выключения из-за истощения ресурса (например: форк-бомба для принудительного выключения)
- Вы можете написать код, который работает только в определенной среде / ОС, если хотите.
- Стандартные лазейки запрещены
Это код-гольф , поэтому выигрывает меньшее количество байтов!
code-golf
interactive
П. Ктинос
источник
источник
`whatever`;
Bash / Perl / PHP / Ruby / и т. Д. stupiglots.shatdown: past tense of the verb shutdown
Ответы:
Сборка (x86 / x64, Linux, as) ,
222119 байтДолжен запускаться от имени root.
Это эквивалентно нажатию кнопки питания и не является безопасным способом выключения компьютера. Убедитесь, что вы закрыли все открытые приложения и выполнили
sync
сброс всех буферов файловой системы перед выполнением этой программы, чтобы по крайней мере минимизировать риск повреждения файла.Тестовый забег
Вслед за темнотой.
Как это устроено
int $0x80
вызывает программное прерывание. Он работает как на x86, так и на x64, но уже более десяти лет устарел и не должен использоваться в производственном коде.syscall
Вместо этого следует использовать код x64 . x86 следует использоватьsysenter
, но это слишком громоздко для кода гольфа.Результирующее действие системного вызова зависит от регистров EAX - EDX, ESI и EDI. Linux Системный вызов Reference показывает все системные вызовы, которые доступны через
int $0x80
.Когда EAX удерживает значение 0x58 (88) , вызывается перезагрузка , которую также можно использовать для выключения компьютера, перевода его в спящий режим или спящего режима компьютера, а также для переключения ядер и отключения или включения комбинации клавиш Ctrl - Alt - Del .
В начале программы - и, компилируя с помощью
as
илиgcc -nostdlib
, мы можем убедиться, что мы на самом деле в начале программы - большинство регистров устанавливаются в 0 . Это включает EAX, поэтому мы можем использоватьmov $0x58, %al
для установки младших 8 битов EAX значение 0x58 , таким образом, устанавливая сам EAX в 0x58 . Это экономит два байта при ручном обнулении регистраxor %eax, %eax
и еще один при простомmov $0x58, %eax
кодировании 0x58 в 32 бита.Первые два аргумента для перезагрузки - это магические числа, предположительно для предотвращения случайных перезагрузок, которые считываются из регистров EBX и ECX. Если эти числа не равны определенным константам, перезагрузка отказывается выполнять какие-либо действия.
Первое магическое число должно равняться 0xfee1dead ( чувствовать себя мертвым ), вероятно, ссылаясь на выключение / смерть ПК.
Второе магическое число может быть равно четырем различным константам, хотя последние три не работали в древних версиях Linux. Все они, похоже, относятся к последующему включению / рождению ПК.
0x28121969 представляет день рождения Линуса Торвальдса (28 декабря 1969 года).
0x05121996 представляет день рождения Патриции Торвальдс (5 декабря 1996 г.).
0x16041998 представляет день рождения Даниэлы Торвальдс (16 апреля 1998 г.).
0x20112000 представляет день рождения Селесты Торвальдс (20 ноября 2000 года).
Патриция, Даниэла и Селеста Торвальдс - три дочери Линуса Торвальдса.
Регистр EDX выбирает желаемый тип «перезагрузки». 0x4321fedc - это RB_POWER_OFF , который выключает компьютер и выключает его.
Наконец, значение регистра ESI игнорируется для RB_POWER_OFF ; значение регистра EDI полностью игнорируется при перезагрузке .
Альтернативная версия, только для x64, 19 байт
На x64 мы можем использовать правильный системный вызов для того же количества байтов.
Единственные различия заключаются в инструкции (
syscall
vsint $0x80
), значении __NR_REBOOT ( 0xa9 против 0x58 ) и задействованных регистрах.источник
fee1
такdead
щасPowerShell, 13 байт
Довольно понятно? Не работает на ядре PowerShell, поэтому он не будет работать на PowerShell для Linux / MacOS (уже пробовал на TIO :-D).
Бонусная отправка мусора, 12 байт
В моем тестировании это работает на Windows 2003 с PowerShell 2.0. Он не будет работать на большинстве новых версий и может не работать в зависимости от того, какие модули установлены. Это довольно ужасно!
Это ищет список команд для любой с шаблоном
s*r
и затем запускает их все! Чтобы было ясно, это опасно, не делай этого!Хитрость, конечно, заключается в получении списка команд, которые не имеют обязательных параметров, в противном случае PowerShell запросит значение.
На моей машине 2003 года она возвращает 3 команды:
Да, он запускает экранную заставку, но нет, он не ожидает его завершения перед запуском
Stop-Computer
.Этот подход может работать на более новых машинах, опять же, в зависимости от того, какие модули установлены, но лучшее, что я мог сделать в Windows 2012 и 2016, было 14 байт :
(и да, конечно, представление winbatch будет работать в PowerShell, и оно короче, но ... это не весело)
источник
gcm *p-c*|iex
- и результат тоже один!Stop-Computer
, что является последним результатом).Пакетный, 10 байтов
На окнах этого будет достаточно
Это настроит отключение через одну минуту.
В качестве альтернативы, как указывает @flashbang:
Это немедленно выключает компьютер.
источник
Press the big button on the front of your computer
= 0 байтмашинный код x86, Lenovo Z510, DOS COM или загрузчик, 7 байт
Собран в
B8 00 3C BA 04 18 EF
Я эксплуатирую « Вы можете писать код, который работает только в определенной среде / операционной системе, если хотите » до предельного уровня: это будет работать только на Lenovo Z510 1 .
Это записывает
SLP_TYPa << 10 | SLP_EN
вPM1a_CNT
регистр ACPI, я выгружал эти значения из таблиц ACPI несколько месяцев назад для ответа об отключении (где я даю немного контекста к приведенному выше коду).Это может быть запущено под DOS как COM (просто запишите двоичные данные в файл и измените расширение на «com») или как загрузчик.
Для последних напишите стандартную подпись и остерегайтесь проблем с современными прошивками .
1 Не совсем верно, любая система с такой же конфигурацией ACPI также будет отключена.
источник
Оболочка GRUB , 4 байта
Golfed
бонус
Вот доказательство того, что GRUB оболочка действительно Tur п ING-полной (см комментарии):
источник
built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivatives
и поддерживает переменные, условные конструкции, функции и более , так что, очевидно, это будет Токарно-полной, по любым меркам.65C02 машинный код, 1 байт
Инструкция STP (0xDB):
STP останавливает тактовый вход 65C02, фактически отключая 65C02 до тех пор, пока не произойдет аппаратный сброс (т. Е. На вывод RES придет низкий уровень). Это переводит 65C02 в состояние низкого энергопотребления. Это полезно для приложений (схем), которые требуют низкого энергопотребления, но STP редко видится иначе.
(Источник: http://www.6502.org/tutorials/65c02opcodes.html )
xxd dump:
источник
Matlab, 21 байт
Я не пробовал это (закрытие всех программ для перезапуска в середине дня не очень заманчиво), но это должно работать., Это работает...Я добавлю краткое объяснение позже, мой ноутбук в настоящее время выключен.
источник
uptime
shutdown -s
как оболочку?MATLAB, 11 байт
Несколько похоже на подход Стьюи Гриффин . Тем не менее, MATLAB имеет путь более короткие пути вызова системных команд; в этом случае
!
используется. Windows не нуждается.exe
в именах команд, так что это также не учитывается./
Вариант все еще поддерживается (я бегу Windows 10), и исключает необходимость в пространстве. Альтернативы:источник
SmileBASIC,
14116 байтВызывает сбой, вызывающий перезапуск 3DS. Я надеюсь, что это имеет значение.
Работает в самой последней версии.
источник
REBOOT
из SBv2 считается действительным ответом.Баш,
76 байтПредполагая, что программа запускается от имени пользователя root.
источник
poweroff
это одно слово, хотя букв немного больше.Java,
101986242 байтаКак указал @Snowman, в вопросе не указано, нужна ли была полная программа, так что это все равно должно быть приемлемым.
источник
class
на, такinterface
как это позволяет опуститьpublic
из основного.void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}
()->{Runtime.getRuntime().exec("init 0");}
или предварительно()->Runtime.getRuntime().exec("init 0")
(не могу проверить в данный момент). Это лямбда, реализующая пользовательский интерфейс void, no-args-throwing.Python 2, 29 байт
Работает в системах Linux и требует привилегий root.
Для Windows 33 байта
Это может быть наименее интересный или полезный код, который я когда-либо писал.
источник
Commodore 64, 11 байт
Это из приглашения BASIC. Или же...
Commodore 64, сборка 6502, 3 байта (в сборе), 16 байтов (источник)
источник
sys64738
использованием нулевых байтов, поскольку нет ни программы, ни чего-либо еще для хранения; Вы используете экранную память, но эта память уже будет заполнена пробелами, поэтому вы просто заменяете эти пробелы текстом.0
иsys64738
, вы можете заменитьsys
форму ярлыкомsY
, и я не считаю завершающий символ новой строки в длине программы. Однако я не думаю, что ваш код соответствует требованиям: код в 64738 выполняет программный сброс, а не выключение питания.TI-Nspire CX CAS, 3 байта
суммирование двух пустых строк.
В более старой версии калькулятора это приводило к сбою устройства и его перезагрузке (нет способа выключить устройство без перезагрузки, кроме физических комбинаций кнопок).
Видео от Adriweb
источник
С ++,
5140 байт-11 байт благодаря Ingve !
Работает только в IncludeOS (v0.10.0-rc.1)
Контрольная работа:
источник
void Service::start
,int main
работает и в IncludeOS .AppleScript, 30 байт
Делает именно то, что говорит: говорит Finder, чтобы выключить компьютер.
источник
AutoHotkey,
1110 байтСохранил байт благодаря Гурупад Мамадапур
AHK Поддерживает команду выключения по умолчанию.
9
Представляет собой флаг, состоящий изShutdown=1
+PowerDown=8
.источник
AHK
таинственный,
не нужно. Попробуйте проверить это с другим флагом. Я думал, что это не сразу выключит компьютер, и поместил его в мой основной скрипт, который загружается при запуске: D Теперь я должен загрузить в безопасном режиме и решить проблему. Вздох.Машинный код (x86, загрузчик) 18 байт
Разборка:
Вы можете проверить это в отладчике Bochs с помощью следующих команд (после запуска симуляции, после установки какого-либо диска):
Этот же машинный код также будет работать как исполняемый файл DOS (
*.COM
).источник
C #,
795453 байтаЭто работает на Windows.
79 байтов :
53 байта , благодаря TheLethalCoder:
источник
Action<int>
и сделать_=>System.Diagnostics.Process.Start("shutdown", "/s");
для 54 байтов.AutoIt, 11 байт
Функция выключения получает комбинацию следующих кодов
Например, для выключения и выключения необходимо ввести код 9 (выключение + выключение = 1 + 8 = 9).
источник
0
(выход из системы) здесь особый случай; он не объединяется с Standby или Hibernate неявным образом.0 + 32 = 32
Windows - NativeAPI, 212 байт
Хорошо, это не самая короткая версия. Но, может быть, некоторым это интересно. Это не будет выполняться в подсистеме Win32. Однако он будет работать при выполнении в контексте нативного API (как это делает autochk.exe)
Код
строить
Чтобы построить это, используйте
build.exe
инструмент WinDDK (с соответствующимsource
файлом дляNMAKE
)Или используйте эти команды для компиляции и ссылки:
Примечание: это создаст собственный исполняемый файл x86. Измените соответствующие биты, если вы хотите построить это для другой архитектуры.
Контрольная работа
Чтобы протестировать собственный исполняемый файл, вы должны выполнить его до загрузки подсистемы win32. Один из распространенных способов сделать это - добавить исполняемый файл в следующий раздел реестра:
Предупреждение
Однако, если вы сделаете это, у вас должна быть возможность редактировать куст реестра целевой ОС из другой ОС. Поскольку вы больше не сможете загружать целевую ОС!
Я сделал это на виртуальной машине, где я мог легко вернуться к предыдущему снимку!
источник
Groovy, 23 байта
источник
Большинство оболочек Linux, 15 байт
Это может быть сделано в 11 байт, если вы оказались в
/proc
каталоге:Это очень просто (не имеет побочных эффектов, таких как размонтирование файловых систем или процессы уничтожения) и довольно жестокое.
источник
bash
) на моем компьютере :-)echo o>/p*/*ger
Оболочка Android, 9 байт
источник
AppleScript, 44 байта
Я не знаю, как работает синтаксис AppleScript или что-то еще, поэтому, если кто-нибудь знает, как сократить это, пожалуйста, сообщите.
Кроме того, я делаю это на своем телефоне в школе («взлом»), поэтому я не могу проверить это.
На 14 байт меньше (спасибо kindall) можно сказать
источник
tell app "Finder" to shut down
должен работать, я считаю (хотя компиляция может заменить «приложение» на «приложение»).J, 14 байт
Работает на системах Linux.
2!:0
выполняет строку в/bin/sh
.источник
Clojure,
4039 байт-1 байт, поменяв флаг с
-s
на/s
, что позволило мне избавиться от пробела.В основном ответ Java.
Тестировать это было весело. Windows решила обновить прошивку на моем Surface, как только он выключится. Конечно.
источник
Node.js, 39 байт
Linux
источник
AHK,
1915 байтРаботает только на окнах.
источник
C ++,
4847 (Windows)4645 (Linux) байтУдалил 1 байт благодаря Snowman
Это должно выключить систему для Windows
Это должно выключить систему для Linux
источник
;
?#include<cstdlib>
побреет байт.