Je cherche (suis-je?) Un morceau de code qui s'arrête immédiatement - de manière absolument non conventionnelle.
Cela ne signifie pas: System.exit((int) 'A');
(Java).
Cela pourrait signifier:
#!/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()
La réponse la plus votée gagne! Toutes les langues, toutes les architectures.
Edit: Quitter en lançant des exceptions ne sera plus accepté!
exit()
, mais c’est quand même une fonctionnalité implémentée ...Réponses:
bash, 6 personnages
exec
remplace le processus actuel par autre chose.[
est la commande la plus courte que j'ai pu trouver qui soit sans danger (c'est un alias pourtest
)la source
exec
la[
commande :)~ $ echo $PATH/?
->/bin/X /bin/[ /bin/w
. La coquille de poisson m'a donné deux autres commandes.w
est intéressant à mon avis.Frapper
Termine le programme aussi rapidement que l'utilisateur peut réagir ;-)
la source
Redcode
(Background: Redcode est le langage de pseudo-assemblage utilisé dans le jeu de programmation Core War introduit par AK Dewdney en 1984. Il utilise généralement beaucoup de code auto-modificateur. J’ai écrit un joli petit tutoriel sur la programmation Redcode il ya quelques années. )
Ce programme à instruction unique non seulement se tue, mais efface également son propre code de programme, ne laissant aucune trace de lui-même en mémoire.
Ennuyeux, vous dites? Après tout, le programme ci-dessus serait mort de toute façon, même s'il n'avait pas écrasé son code. OK, en voici un qui nettoie tout le noyau avant de finalement s’effacer et de mourir:
Les deux premières instructions font en réalité l'essentiel du travail: il s'agit simplement d'une simple boucle copie / saut qui copie la cellule d'instruction vide (initialisée à
DAT 0, 0
) après la fin du programme dans chaque cellule suivante (à l'aide du mode d'adressage indirect post-incrémentation).>
), jusqu’à ce que le pointeur se termine au début de la mémoire et écrase le contenuMOV
de la boucle. Une fois que cela se produit, leJMN
(JuMp si non nul) le détecte et tombe à travers.Le problème est que cela laisse toujours le
JMN
lui - même non nettoyé. Pour se débarrasser de celui - ci, nous avons besoin d' un autreMOV
pour essuyer laJMN
... mais cela signifie que nous avons encore besoin une autreMOV
pour essuyer queMOV
, et ainsi de suite. Pour tout le programme disparaître sans laisser de trace, nous devons organiser en quelque sorte pour une seuleMOV
instruction pour essuyer la fois elle - même et au moins une autre instruction.C'est là
SPL
qu'intervient - c'est l'un des opcodes les plus étranges de Redcode. En gros, il s’agit d’une instruction de type "Branche des deux côtés". Vous voyez, au lieu d'un simple registre "compteur de programme", comme n'importe quel processeur normal, la VM Redcode a une "file d'attente de processus": une liste cyclique de pointeurs vers des instructions à exécuter. Normalement, à chaque cycle, un pointeur d'instruction est décalé en début de file d'attente, l'instruction est exécutée et l'instruction suivante (à moins qu'il y ait un saut ou une instruction non conforme) est poussée sur la queue de la file d'attente. MaisSPL
provoque aussi bien la prochaine instruction et l'instruction cible donnée (qui, dans le cas deSPL 1
, est également l'instruction suivante) pour être poussé sur la file d' attente.Le résultat de tout cela est que, après l'
SPL 1
exécution des deux instructions, il y a maintenant quatre processus dans la file d'attente, tous relatifs à l'exécution du dernierMOV
. C’est juste assez pour effacer leJMN
, les deuxSPL
et leMOV
lui - même, et laisse également laptr
cellule d’instructionsDAT 0, 0
- impossible à distinguer du noyau vide qui l’entoure.(Alternativement, nous aurions pu remplacer l'
ptr
instruction parMOV 1, 1
, qui aurait été convertieMOV 1, 0
par les instructions précédentes, et se serait donc effacée elle-même, comme le faisait le premier programme ci-dessus.)Ps. Si vous souhaitez tester ces programmes, téléchargez un simulateur Redcode (également appelé MARS). Je recommanderais soit CoreWin ou le vénérable pMARS , bien qu'il existe également plusieurs autres bons simulateurs.
la source
MOV source, dest
. Mais comme je l'ai dit, tout l'adressage dans Redcode est relatif, donc l'adresse correspond en0
réalité à "l'adresse de cette instruction", alors que l'adresse correspond en1
réalité à "l'adresse de cette instruction + 1". (Et l’adresse absolue 0 n’a de toute façon aucune particularité dans Redcode; en fait, une conséquence intéressante de la conception "tout adressage relatif" est qu’il est en réalité impossible pour un programme Redcode de trouver sa propre adresse absolue dans le noyau! )C
Notez que ce n'est pas un code portable. Il fonctionne avec ZOG C sur l’ ART DS9000 . Je crois que l'utilisation d' armements non conventionnels qualifie ce code pour ce défi. Si vous craignez que le délai requis par cette partie de code pour livrer sa charge utile ne soit pas immédiatement qualifié , contactez-nous pour obtenir des conseils sur les frappes préventives.
Sur mon ordinateur personnel, il ne compile même pas - je n'ai ni les bons pilotes ni les bonnes bibliothèques. J'ai entendu dire qu'il existe des implémentations C populaires où ce programme compile et produit des effets moins spectaculaires, mais je n'ai jamais eu le courage d'essayer.
la source
JavaScript
Il suffit de naviguer vers un site Web différent ( délicieux ). :-)
Golfé (10 caractères):
la source
C #
Se tue en tuant tous les processus sauf lui-même.
Pour pimenter un peu, nous pourrions PInvoke
TerminateProcess
au lieu d’utiliserProcess.Kill
la source
BASH - 12 caractères
Forkbomb classique. Verrouille l'ordinateur et oblige l'utilisateur (ou l'administrateur) à redémarrer.
la source
:()
et:|
Python (sur les anciens ordinateurs portables)
Sur les anciens ordinateurs portables dotés de processeurs à cœur unique et de mauvais refroidissement:
Lorsque le portable explose (ou simplement s'éteint) après quelques heures, le programme ne sera plus lancé.
(Pour de meilleurs résultats, enveloppez l'ordinateur portable dans une couverture ou quelque chose de ce genre)
la source
Rubis
kill
s le processus ruby / irb en cours sur * nix.la source
Apple 2 Basic
la source
POKE
écrit unEND
jeton sur lePRINT
jeton, puis le secondPOKE
écrit un terminateur de commande sur le premier"
. Lorsque leGOTO
est exécuté, il est exécutéEND
au lieu dePRINT
et le programme se termine.En montage, quelque chose comme ceci fonctionnerait probablement:
Je me souviens que compile ce DOS effectivement travaillé. À l'époque, il a redémarré l'ordinateur.
la source
PHP
Effets:
Supprime votre fichier de script de merde, puis tue votre programme.
Jetez un de ces mauvais garçons dans un code pour dérouter les gens.
la source
quit
mais la liste de paramètres est le code à exécuter. Je reçois une erreur d'analyse en essayant de l'exécuter.C, 9 caractères
Compile avec d'
gcc
autres compilateurs qui ne se soucient pas des petits détails commemain
ne pas être une fonction.Fonctionne sur les
x86
plates-formes - le programme se termine immédiatement.195 est l'opcode de l'
ret
instruction.la source
main
est situé dans.data
parce que c'est un int, pas dans.text
, et.data
est chargé dans une page non exécutable.J'ai toujours voulu poster ça quelque part, je suppose que ça convient ici même s'il y a déjà une réponse acceptée.
Cela fonctionne sur n’importe quel système post 4.3BSD et sur d’autres qui s’implémentent
revoke
de la même manière. Linux ne le fait pas même s'il existe un prototype, comme MacOS le faisait auparavant, mais il ne renvoie que des erreurs dans les versions récentes.revoke
prend un chemin vers un fichier et détruit de force toutes les références à ce fichier. Ceci inclut tous les mappages de mémoire de ce fichier, même l'exécutable lui-même. De toute évidence, vous devez démarrer le programme avec un chemin d'accès, cela ne fonctionnera pas s'il se trouve dans PATH.Une variante de celle-ci qui devrait fonctionner sur la plupart des systèmes de type Unix est la suivante:
Nous venons de dé-mapper la page qui est mappée de
main
sorte que, lorsque l'appel àmunmap
retourner apparaisse , il n'a nulle part où retourner. Il y a une petite chance que l'appel de fonction àmunmap
trouve juste sur une limite de page et que le retour réussisse. Par conséquent, pour être parfaitement sûr que cela fonctionne, nous devrons probablement essayer de défaire deux pages en premier.Et bien sûr, une variation sur le même thème:
Démappez simplement la pile afin de ne pas avoir d’autre endroit où retourner. Même mise en garde que démappage
main
- il se peut que nous devions démapper deux pages, sauf que nous devons nous rappeler que la pile diminue probablement (à moins que vous ne utilisiez PA-RISC ou une autre architecture étrange de ce type).Une autre façon de tirer le tapis de sous vos propres pieds:
Le système d'exploitation dépend de la manière dont le système traite une limite de processeur de 0 seconde et de la fréquence à laquelle le temps de traitement est effectué. MacOS tue le processus immédiatement, Linux nécessite la boucle while, un autre système que j'ai essayé ne fait rien, même avec une limite d'une seconde et une boucle while, je n'ai pas débogué davantage.
la source
sh
Panique kernal instantanée sur Linux. Destorys tous les processus, y compris lui-même
Cmd
Écran bleu instantané sous Windows. Termine le
Client/Server Runtime SubSystem
. Pskill doit être installé.la source
killall init
aussi travailler?sudo killall init
En C (compatible Windows / Linux / (probablement aussi Unix / BSD Freed aussi)):
Exemple d'utilisation:
Sous Windows, compilez avec:
Et Linux:
En supposant que le compilateur est installé et dans la variable currenth PATH.
EDIT: Techniquement, il lève une exception (soulevée par le processeur) sous Linux, mais ce message n’existe pas sous Windows. Donc, cette entrée n'est probablement pas valide; mais je pense que c'est cool: P
EDIT: en assembleur x86 (en utilisant NAsm / YAsm)
Compiler avec:
(Les fenêtres)
(Linux)
Malheureusement, cette méthode produit également un core dump sur Linux, donc je crois que cela est fonctionnellement équivalent à la méthode C; sauf plus efficace.
la source
-Wall -Wextra -std=c99 -pedantic
et il n'y a aucun avertissement.Prendre les choses à la lettre avec Haskell:
la source
Python
En utilisant le
multiprocessing
module , nous pouvons générer un autre thread dont le travail consiste à communiquer avec le processus d'origine via une file d'attente, en lui indiquant quand quitter:la source
ANSI C
Sans optimisation du code, le programme suivant se ferme si rapidement qu'il ne peut pas être lancé même s'il est compilé dans un programme valide.
cela peut dépendre du système - commentez si vous pouvez le lancer.
la source
D'accord. Si simplement appeler
System.exit
n'est pas autorisé en Java, pourquoi ne pas l'appeler via une réflexion depuis un autre thread?Recherche la méthode exit, génère un nouveau thread et compte à
reboursjusqu'à ce que ce thread tue le processus en appelant exit via réflexion.la source
Langage machine x86, 1 caractère
Vous pouvez généralement créer un exécutable réalisable à partir d'une instruction RET
la source
C (Linux)
Version suicide
Envoie un SIGKILL à lui-même.
Version "Tu quoque mi fili"
Forks, alors le fils tue le père.
la source
Perl
C'est tout.
Explication: Il lève l'exception
Unimplemented
et se termine immédiatement.la source
Lot et débogage
Un vieil homme mais goodie, fonctionne sur les machines DOS pour un redémarrage instantané du système. En plus, c'est un script destiné à être interprété par deux interprètes différents et incompatibles.
reset.bat
L'interprétation de fichier de commandes ignore les instructions destinées au débogage et se charge elle-même pour le débogage à des fins d'interprétation. La ligne vide suivante
goto
est nécessaire pour effacer l'erreurdebug
car elle est alimentée par une commande inconnue, à savoir la commande goto.la source
Java
Le code ci-dessous n'est pas testé et ne fonctionnera que sur certaines plates-formes.
la source
sudo reboot
, sous Windowsshutdown /r /t 0
sudo java Quitter
.Powershell
Enregistrez ceci sous le nom 'lastresort.ps1' et cela devrait suffire.
Si vous rencontrez des problèmes avec le script qui ne s'exécute pas à cause d'une politique idiote, tapez ceci avant d'exécuter le script:
la source
TI-Basic 84
la source
Python (une alternative d'une ligne à l'OP)
Je pensais que la réponse en Python n'était pas meilleure que celle suggérée par le PO, mais je n'aimais pas le nombre de lignes, alors voici comment vous faites exactement comme le PO, mais en une seule ligne:
Vous pouvez en faire une fonction et le travail sera fait pour vous.
la source
Ma propre idée, ne pas participer
TIGCC (pour Texas Instrumens TI-89, TI-89 Titanium, TI-92 +, TI-V200)
TI-Basic pour les mêmes calculatrices
Ce que fait le programme: d’abord, il s’efface de la RAM. (Ne le mettez pas dans la ROM ou cela ne fonctionnera pas ...) Il peut toujours fonctionner car lors de l'exécution, une copie du programme est créée et exécutée.
asm(trap #2);
invoque la commande ASM4E424E750000
, qui permet de réinitialiser la calculatrice, de supprimer sa RAM (la mémoire flash reste intacte) et de réinstaller toutes les applications.EDIT: vient de tester la version Basic. Il ne peut pas se supprimer ...
la source
Format .com MS-DOS
Il écrit des instructions non valides (FFFF) dans la mémoire, puis les exécute, provoquant un crash de NTVDM.
Hexadécimal
Langage d'assemblage Debug.exe
la source