Я ищу (не так ли?) Кусок кода, который немедленно завершается - совершенно нетрадиционным способом.
Это не значит: System.exit((int) 'A');
(Java).
Это может означать:
#!/usr/bin/env python3
# NOTE: This kills ALL RUNNING Python processes. Be careful!
def exit():
import os
os.system("killall python3")
# Windows addon
os.system("taskkill /im python.exe /f")
exit()
Ответ с наибольшим количеством голосов победил! Все языки, все архитектуры.
Редактировать: выход, выбрасывая исключения больше не будут приняты!
exit()
, но все же это реализованная функция ...Ответы:
Баш, 6 символов
exec
заменяет текущий процесс чем-то другим.[
это самая короткая команда, которую я смог найти безвредной (это псевдоним дляtest
)источник
exec
по[
команде :)~ $ echo $PATH/?
->/bin/X /bin/[ /bin/w
. Рыбная раковина дала мне две другие команды.w
интересно на мой взгляд.удар
Завершает программу так быстро, как пользователь может реагировать ;-)
источник
Redcode
(Справочная информация: Redcode - это язык псевдо-ассемблера, используемый в игре для программирования Core War, представленной AK Dewdney в 1984 году. В ней обычно интенсивно используется самоизменяющийся код. Я написал симпатичное небольшое руководство по программированию Redcode несколько лет назад. )
Эта программа с одной инструкцией не только убивает себя, но и стирает собственный программный код из памяти, не оставляя следов в памяти.
Скучно, говоришь? В конце концов, вышеприведенная программа в любом случае умерла бы, даже если бы она не перезаписывала свой код. Хорошо, вот тот, который стирает все ядро перед тем, как окончательно вытереть себя и умереть:
Первые две инструкции фактически выполняют большую часть работы: это просто простой цикл копирования / перехода, который копирует пустую ячейку инструкции (которая инициализируется
DAT 0, 0
) после завершения программы в каждую последующую ячейку (используя режим косвенной адресации после приращения).>
до тех пор, пока указатель, наконец, не переместится в начало памяти и не перезапишетMOV
сам цикл. Как только это происходит,JMN
(JuMp, если не ноль) обнаруживает это и проваливается.Проблема состоит в том, что это все еще оставляет
JMN
себя незаписанным. Чтобы избавиться от этого, нам нужен еще один,MOV
чтобы стеретьJMN
... но это означает, что нам нужен еще один,MOV
чтобы стереть этоMOV
, и так далее. Чтобы заставить всю программу исчезнуть без следа, мы должны как-то организовать однуMOV
инструкцию, чтобы стереть как себя, так и хотя бы одну другую инструкцию.Вот где
SPL
приходит - это один из самых странных кодов операций в Redcode. По сути, это инструкция "Разветвить оба пути". Видите ли, вместо простого регистра «счетчик программ», как у любого обычного ЦП, виртуальная машина Redcode имеет «очередь процессов»: циклический список указателей на выполняемые инструкции. Обычно в каждом цикле указатель команды смещается с начала очереди, инструкция выполняется, и следующая команда (если не было перехода или недопустимой инструкции) помещается в конец очереди. НоSPL
вызывает как следующую инструкцию, так и заданную целевую инструкцию (которая, в случаеSPL 1
, также является следующей инструкцией), помещаются в очередь.Результатом всего этого является то, что после выполнения двух
SPL 1
инструкций в очереди теперь находятся четыре процесса, все о последнем выполненииMOV
. Этого достаточно, чтобы стереть как самиJMN
, такSPL
и самихMOV
себя, и это также оставляетptr
ячейку инструкции какDAT 0, 0
неотличимую от пустого ядра, окружающего ее.(В качестве альтернативы, мы могли бы заменить
ptr
инструкцию наMOV 1, 1
, которая была бы преобразованаMOV 1, 0
в более ранние инструкции, и, таким образом, стерлась бы сама, как это делала первая программа выше).Ps. Если вы хотите протестировать эти программы, загрузите симулятор Redcode (он же MARS). Я бы порекомендовал либо CoreWin, либо почтенный pMARS , хотя есть и несколько других хороших симуляторов.
источник
MOV source, dest
. Но, как я уже сказал, вся адресация в Redcode является относительной, поэтому адрес0
фактически означает «адрес этой инструкции», в то время как адрес1
фактически означает «адрес этой инструкции + 1». (И абсолютный адрес 0 в любом случае не является чем-то особенным в Redcode; на самом деле, одно интересное следствие конструкции «все относительной адресации» заключается в том, что для программы Redcode фактически невозможно найти свой собственный абсолютный адрес в ядре! )С
Обратите внимание, что это не переносимый код. Он работает с ZOG C на ART DS9000 . Я считаю, что использование нетрадиционных вооружений делает этот код пригодным для этой задачи. Если вы обеспокоены тем, что задержка, необходимая для того, чтобы этот фрагмент кода доставил свою полезную нагрузку, не квалифицируется как немедленная , свяжитесь с нами для получения консультации по упреждающим ударам.
На моей домашней машине он даже не компилируется - у меня нет нужных драйверов и библиотек. Я слышал, что есть популярные реализации C, где эта программа компилируется и работает с менее впечатляющими эффектами, но у меня никогда не было смелости попробовать.
источник
JavaScript
Просто переходит на другой ( вкусный ) сайт. :-)
Гольф (10 символов):
источник
C #
Убивает себя, убивая каждый процесс, кроме самого себя.
Чтобы немного оживить его, мы могли бы использовать PInvoke
TerminateProcess
вместоProcess.Kill
источник
BASH - 12 символов
Классическая вилочная бомба. Блокирует компьютер и заставляет пользователя (или администратора) перезагрузиться.
источник
:()
и:|
Python (на старых ноутбуках)
На старых ноутбуках с одноядерными процессорами и плохим охлаждением:
Когда ноутбук взрывается (или просто выключается) через несколько часов, программа не будет работать.
(Для достижения наилучших результатов оберните ноутбук в одеяло или что-то)
источник
Рубин
kill
s запущенный процесс ruby / irb в * nix.источник
Apple 2 Basic
источник
POKE
записываетEND
токен поверхPRINT
токена, а затем второйPOKE
записывает терминатор команды поверх первого"
. КогдаGOTO
выполняется, он заканчивается,END
вместо того, чтобыPRINT
и программа заканчивается.В сборе что-то вроде этого, вероятно, будет работать:
Я помню, что компилирует это на самом деле работал DOS. Тогда он перезагрузил компьютер.
источник
PHP
Эффекты:
удаляет ваш дрянной файл скрипта и затем убивает вашу программу.
Бросьте одного из этих плохих парней в кодовую базу, чтобы сбить с толку людей.
источник
quit
но список параметров - это код для запуска. Я получаю ошибку разбора при попытке запустить его.С, 9 символов
Компилируется с
gcc
другими компиляторами, которые не обращают внимания на мелкие детали, например,main
не являются функцией.Работает на
x86
платформах - программа сразу выходит.195 - это код операции
ret
инструкции.источник
main
находится в,.data
потому что это int, а не в.text
, и.data
загружается в неисполняемую страницу.Я всегда хотел опубликовать это где-то, я думаю, что это подходит здесь, хотя уже есть принятый ответ.
Это работает на любой системе после 4.3BSD и других, которые реализуют
revoke
таким же образом. В Linux даже нет прототипа для него, MacOS делал в прошлом, но возвращает только ошибки в последних версиях.revoke
берет путь к файлу и принудительно уничтожает все ссылки на этот файл. Это включает в себя любые отображения памяти этого файла, даже сам исполняемый файл. Очевидно, вам нужно запустить программу с путем к нему, это не будет работать, если это произойдет в PATH.Вариант этого, который должен работать на большинстве unix-подобных систем:
Мы просто распаковываем отображаемую страницу,
main
чтобы приmunmap
возврате вызова ей некуда было возвращаться. Существует небольшая вероятность того, что вызов функцииmunmap
находится только на границе страницы, и возврат завершится успешно, поэтому, чтобы быть полностью уверенным, что это работает, мы, вероятно, должны сначала попытаться отобразить две страницы.И конечно, вариация на одну и ту же тему:
Просто отмените отображение стека, чтобы нам некуда было возвращаться. То же самое, что и при отображении
main
- нам может понадобиться удалить две страницы, за исключением того, что мы должны помнить, что стек, вероятно, уменьшается (если вы не используете PA-RISC или какую-то другую странную архитектуру, подобную этой).Еще один способ вытащить коврик из-под ног:
Это зависит от операционной системы в зависимости от того, как система обрабатывает лимит процессора в 0 секунд и как часто выполняется учет времени процессора. MacOS немедленно убивает процесс, Linux требует цикла while, другая система, которую я пробовал, ничего не делала даже с ограничением в одну секунду и циклом while, я не отлаживал дальше.
источник
ш
Мгновенная кернальная паника в Linux. Уничтожает все процессы, включая себя
Cmd
Мгновенный синий экран на Windows. Завершает
Client/Server Runtime SubSystem
. Пскилл должен быть установлен.источник
killall init
работать?sudo killall init
В C (Совместимо с Windows / Linux / (возможно, также с Unix / Freed BSD)):
Пример использования:
Под Windows скомпилируйте с:
И Linux:
Предполагая, что компилятор установлен и в переменной PATH currenth.
РЕДАКТИРОВАТЬ: Технически это вызывает исключение (вызванное процессором) в Linux, но в Windows такого сообщения нет. Так что эта запись, вероятно, недействительна; Однако я думаю, что это круто: P
РЕДАКТИРОВАТЬ: В ассемблере x86 (используя NAsm / YAsm)
Компилировать с:
(Windows)
(Linux)
К сожалению, этот способ также создает дамп ядра в Linux, поэтому я считаю, что он функционально эквивалентен методу C; кроме более эффективного.
источник
-Wall -Wextra -std=c99 -pedantic
и никаких предупреждений нет вообще.Говоря глупо с Хаскеллом:
источник
питон
Используя в
multiprocessing
модуль , мы можем породить другой поток , чья работа состоит в том, чтобы общаться с оригинальным процессом через очередь, говоря, когда бросить:источник
ANSI C
Без оптимизации кода следующая программа завершает работу так быстро - ее невозможно запустить, даже если она компилируется в допустимую программу
это может зависеть от системы - прокомментируйте, если можете ее запустить.
источник
Хорошо. Если простой вызов
System.exit
в Java не разрешен, как насчет вызова через отражение от другого потока?Ищет метод выхода, порождает новый поток и ведет
обратныйотсчетдотех пор, пока этот поток не убьет процесс, вызвав выход через отражение.источник
x86 machine language, 1 character
You can usually make a workable executable out of one RET instruction
источник
C (Linux)
Suicide version
Sends a SIGKILL to itself.
"Tu quoque mi fili" version
Forks, then the son kills the father.
источник
Perl
That is all.
Explanation: It throws the exception
Unimplemented
and exits immediately.источник
Batch & Debug
An oldie but goodie, works on DOS machines for an instant system reboot. Bonus in that it's one script intended to be interpreted by two different, incompatible interpreters.
reset.bat
The batch file interpretation skips over the instructions intended for debug, and feeds itself to debug for interpretation. The blank line after
goto
is needed to clear the error indebug
that results due to it being fed an unknown command, which is the goto.источник
Java
The below code is not tested and will only work on some platforms.
источник
sudo reboot
, on Windowsshutdown /r /t 0
sudo java Quitter
.Powershell
Save this as 'lastresort.ps1' and it should do the trick.
If you run into problems with the script not executing due to some dumb policy, type this before executing the script:
источник
TI-Basic 84
источник
Python (a one line alternative to the OP)
I figured there wasn't really a better Python answer than what the OP suggested, but I didn't like how it was so many lines, so here's how you do exactly as the OP did but in one line:
You can make this a function and it will do the job for you.
источник
My own idea, not participating
TIGCC (for Texas Instrumens TI-89, TI-89 Titanium, TI-92+, TI-V200)
TI-Basic for the same calculators
What the program does: First it deletes itself out of the RAM. (Don't put it to the ROM or it won't work...) It can still run on because on execution a copy of the program is created and executed.
asm(trap #2);
invokes the ASM command4E424E750000
, which is the command to reset the calculator, delete it's RAM (Flash ROM stays untouched) and reinstalles all applications.EDIT: Just tested the Basic version. It can't delete itself...
источник
MS-DOS .com format
It writes invalid instructions (FFFF) into the memory and then executes them, making NTVDM crash.
Hexadecimal
Debug.exe assembly language
источник