Code Golf of Death [fermé]


34

Ecrivez du code qui provoque une panique de BSOD ou du noyau!

Règles:

  • Sous Windows, vous devez provoquer un BugCheck (écran bleu de la mort), sous Linux (ou d'autres systèmes * nix), vous devez provoquer une panique du noyau.
  • Ne doit pas endommager le système (c.-à-d. Qu'il devrait fonctionner au redémarrage)
  • Les pilotes en mode noyau sont autorisés.
  • Indiquez les informations de votre système d'exploitation et de votre version.
  • Expliquez comment le crash est provoqué.
  • Ce n’est pas contre les règles d’utiliser des outils spécialement conçus pour provoquer un crash, mais cela n’est pas très créatif!
  • Le plus grand nombre d'upvotes gagne.

3
@urogen - La dernière fois que j'ai vérifié, la création d' 1/0un fichier appelé driver.cne constitue pas un pilote en mode noyau valide. Quoi qu'il en soit, le gagnant est basé sur des votes positifs et non sur la longueur du code.
Polynomial

1
Je n'ai pas suivi Meta Code Golf récemment - est-ce que le "plus haut voté" est maintenant autorisé? (Si tel est le cas, ce site est 100 fois plus impressionnant!)
Ry-

1
@minitech C'est un critère objectif, donc je ne vois pas pourquoi cela ne devrait pas être permis.
Polynomial

2
@Polynomial Je l'ai voté et presque toutes les réponses, elles sont excellentes et la communauté souhaite sincèrement que ce type de défis puisse être autorisé, mais cela ne correspond pas au modèle SE.
chat

4
Je vote pour clore cette question hors sujet, car elle nécessite un code malveillant, ce qui constitue une violation de nos règles. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007

Réponses:


24

Bash, noyau Linux 2.6.20 x86

Attention: la commande suivante peut causer des dommages permanents à votre système.

cat /dev/urandom > /dev/mem

Produira ce qui suit ( essayez ici ). Après cela, le script se bloque.

/var/root # cat /dev/urandom > /dev/mem                                        
BUG: unable to handle kernel paging request at virtual address 474e82a5         
 printing eip:                                                                  
c01450c4                                                                        
*pde = 00000000                                                                 
Oops: 0000 [#1]                                                                 
CPU:    0                                                                       
EIP:    0060:[<c01450c4>]    Not tainted VLI                                    
EFLAGS: 00000082   (2.6.20 #12)                                                 
EIP is at free_block+0x54/0xf0                                                  
eax: 00000000   ebx: 474e82a1   ecx: c00745c8   edx: c0005e80                   
esi: c0070ce0   edi: c002c1a0   ebp: 00000000   esp: c0085eec                   
ds: 007b   es: 007b   ss: 0068                                                  
Process events/0 (pid: 3, ti=c0084000 task=c0094030 task.ti=c0084000)           
Stack: c0076410 00000002 c0051db0 c0051db0 c0051da0 00000002 c002c1a0 c01457dd  
       00000000 c0070ce0 c002c1a0 c0091840 c0145800 c0145870 00000000 00000000  
       c02cb2a0 c02cb2a0 00000296 c011dd27 c003fab0 c0094030 c009413c 00047e6c  
Call Trace:                                                                     
 [<c01457dd>] drain_array+0x7d/0xa0                                             
 [<c0145800>] cache_reap+0x0/0x110                                              
 [<c0145870>] cache_reap+0x70/0x110                                             
 [<c011dd27>] run_workqueue+0x67/0x130                                          
 [<c011df17>] worker_thread+0x127/0x140                                                                
 [<c010c7d0>] default_wake_function+0x0/0x10                                    
 [<c010c817>] __wake_up_common+0x37/0x70                                        
 [<c010c7d0>] default_wake_function+0x0/0x10                                    
 [<c011ddf0>] worker_thread+0x0/0x140                                           
 [<c0120d94>] kthread+0x94/0xc0                                                 
 [<c0120d00>] kthread+0x0/0xc0                                                  
 [<c0102ee7>] kernel_thread_helper+0x7/0x10                                     
 =======================                                                        
Code: 04 0f 8d 8f 00 00 00 8b 44 24 08 8b 0c a8 8d 91 00 00 00 40 c1 ea 0c c1 e2

Voici une autre exception trouvée avec la même commande:

/dev # cat urandom > mem                                                        
------------[ cut here ]------------                                            
Kernel BUG at c014514c [verbose debug info unavailable]                         
invalid opcode: 0000 [#1]                                                       
CPU:    0                                                                       
EIP:    0060:[<c014514c>]    Not tainted VLI                                    
EFLAGS: 00000046   (2.6.20 #12)                                                 
EIP is at free_block+0xdc/0xf0                                                  
eax: 1608347b   ebx: c009b010   ecx: c003f508   edx: c00057e0                   
esi: c009b000   edi: c002cd40   ebp: 00000000   esp: c0085eec                   
ds: 007b   es: 007b   ss: 0068                                                  
Process events/0 (pid: 3, ti=c0084000 task=c0094030 task.ti=c0084000)           
Stack: c009b010 00000004 c009b010 c009b010 c009b000 00000004 c002cd40 c01457dd  
       00000000 c02ddf20 c002cd40 c0091840 c0145800 c0145870 00000000 00000000  
       c02cb2a0 c02cb2a0 00000296 c011dd27 c005c5a0 c0094030 c009413c 000409ed  

6
Je suppose. Un grand pouvoir implique de grandes responsabilités.
copie

15
Ne respecte pas l' exigence système requise - si vous l'exécutez suffisamment de fois, le pilote de disque sera éventuellement réécrit avec un code qui formate le disque.
Ugoren

5
@ugoren C'est un scénario extrêmement improbable. Il devrait écrire un tas d'adresses 32 bits et d'instructions précises au bon endroit et ne pas écraser les autres
copier

9
"Lancez-le suffisamment de fois, il finira par réécrire le pilote de disque avec un code qui formate le disque" - Pas certain, urandom est pseudo-aléatoire.
Skeevey

3
@ugoren La règle "ne doit pas endommager le système" est juste pour empêcher des réponses comme sudo rm -Rf /. Cette méthode a moins de chances d’endommager de manière permanente le système en utilisant cette méthode, par exemple, de forcer brutalement la sortie d’une série de paroles de chansons basée sur le hachage du texte.
Polynôme

25

C, 16 caractères, pour P5 x86

main=-926478352;

Rappelez-vous le bug F00F tout le monde? J'ai aidé à enfermer une ou deux machines dans la journée avec ce petit programme. (Oui, je joue au golf depuis si longtemps.)

Certes, ce n’est pas tout à fait ce qui était demandé, et cela ne fonctionne que sur les vieux steppings des puces P5 Pentium. Mais en sa faveur, il est multi-plateforme, fonctionnant à la fois sous Linux et Windows!


2
C'est méchant, n'est-ce pas?

9

QBASIC, 38 caractères

DEF SEG=0:FOR I=0 TO 4^8:POKE I,1:NEXT

Vous ne savez pas comment définir un désastre de BSOD ou du noyau sous DOS, mais c'est probablement assez proche. Lorsqu'il est exécuté, l'écran devient simplement vide et la machine ne répond à rien, pas même à Ctrl + Alt + Suppr. Vous devez redémarrer avec une réinitialisation matérielle ou un cycle d'alimentation pour remettre la machine en marche. Cela fonctionne sous DOS 6.22 sous VirtualBox. Vous ne savez pas exactement pourquoi cela provoque le plantage du système, mais, fondamentalement, le programme écrit (POKE) dans une mémoire sur laquelle il n'a aucune activité écrite.


2
Il se bloque parce que vous écrasez de la malbouffe dans la mémoire du programme système.
Polynôme

Oui, je le savais, mais je pensais à quelque chose d'un peu plus spécifique. Je ne sais même pas à quelle partie de la mémoire il écrit.
Kibbee

1
Vous écrasez les vecteurs d'interruption DOS et le COMMAND.COMcode de programme stockés dans des adresses à faible mémoire. Source: img.tfd.com/cde/MEMMAP.GIF
Polynôme du

8

sh (dans JSLinux)

Linux donne au processus init une protection spéciale contre les signaux . Cependant, j'ai remarqué que, dans JSLinux, il /sbin/inits'agit d'un script shell qui exécute d'autres fichiers binaires (dont la plupart sont liés symboliquement /bin/busybox).

Cette boucle "infinie" while redémarre shsi nécessaire:

while /bin/true; do

  setsid sh -c 'exec sh </dev/ttyS0 >/dev/ttyS0 2>&1'

done

Cependant, que se passe- /bin/truet-il si ne renvoie pas toujours un code de sortie de 0? /binest sur le système de fichiers racine en lecture seule, et pourtant Linux nous permet de changer cela en utilisant des montages "bind":

cp -R /bin /tmp/boom
rm /tmp/boom/true
printf '#!/bin/sh\nexec [ $PPID != 1 ]' > /tmp/boom/true
chmod 755 /tmp/boom/true
mount -o bind /tmp/boom /bin
killall -9 sh

Et nous obtenons:

/var/root # ./boom.sh
Killed
Kernel panic - not syncing: Attempted to kill init!

4

Bash sur Linux, 27 caractères

echo c>/proc/sysrq-trigger

Ou si vous avez des autorisations sudo:

echo c|sudo tee /proc/sysrq-trigger

1
Cela se traduit sh: can't create /proc/sysrq-trigger: nonexistent directorypour moi. (Bien que ce soit dans jsLinux, je devrais probablement tester sur une vraie boîte)
Polynomial

4

GTB , 13 caractères

Exécuté à partir d'une calculatrice TI-84

:"+"→_[_+_→_]

Si la majeure partie de la RAM est libre, elle plantera avec ERR:MEMORY

Sinon, la RAM de la calculatrice est tellement encrassée qu'elle s'éteint et l'efface également.

Excellent exemple de "virus de la calculatrice"


Je vois, ce juste met +, ++, ++++, etc. Str0. Cela m’a apporté ERR:MEMORY, mais essayer d’afficher Str0la valeur de l’ écran a immédiatement écrasé mon 84+. En outre, cela m'a fait perdre tous mes programmes.
LegionMammal978


2
:(){ :|:& };:

En bash shell,

Je ne sais pas si cela compte ici, mais si vous le laissez fonctionner assez longtemps, le processeur surchauffe et le système se bloque, et le système redémarre en toute sécurité sans dommage, bien sûr, si vous le faites tout le temps, le système sera endommagé.


6
Cela ne marche pas vraiment. Il tourne juste le processeur à 100% d'utilisation, ce qui est annulé par tout système de refroidissement semi-décent. J'ai utilisé Folding @ Home pendant des mois à 100% d'utilisation du processeur et je n'ai jamais eu la machine à bégayer.
Polynôme


2
@ Optimus Vous pourriez aussi bien laisser cela ici - ce n'est pas une réponse valable, mais cela ne fait aucun mal. En fait, je m'attendrais à ce qu'une solution Windows soit plus difficile, car Linux vous permet de casser des choses si vous le souhaitez vraiment.
Polynôme

2
@ Polynomial Je ne pense pas que ce soit le cas, Linux ne fait que mieux documenter les façons dont vous pouvez le casser.
cessé de tourner dans le sens anti-horaire le

1
@leftaroundabout je suis en désaccord. Windows est conçu à partir de la base pour vous empêcher activement d'endommager l'état du système en mode utilisateur, et vous empêche également de modifier les fichiers système critiques via la protection de fichiers Windows, les fichiers système verrouillés, etc. Linux, en revanche, est conçu d'une manière qui permette une stabilité maximale si vous n'essayez pas de le gâcher. Mais si vous voulez jouer avec, vous pouvez. Par exemple, je peux modifier /dev/memou /dev/kmemà ma guise depuis la racine.
Polynôme

2

Ruby (exécuté en tant que racine), 36 ou 40 caractères (en fonction des correspondances /p*/s*r)

Voir http://www.kernel.org/doc/Documentation/sysrq.txt et recherchez 'c'(y compris les guillemets!) Pour savoir pourquoi cela fonctionne.

open(Dir['/p*/s*r'][0],?a){|f|f<<?c}

EDIT: Version plus longue qui fonctionne si vous avez d'autres choses correspondant /p*/s*r

open('/proc/sysrq-trigger',?a){|f|f<<?c}

EDIT 2: exagération intentionnelle.


2
get-process | stop-process -force

en PowerShell


1
"Utiliser des outils spécialement conçus pour provoquer un crash n'est pas contre les règles, mais ce n'est pas très créatif!"
John Dvorak

1

Bash Linux

cat /dev/zero > /dev/mem

Efface toute la mémoire et provoque une panique infinie du noyau.

Essayez ici .


En quoi est-ce différent de cela ? s/zero/urandom/.
NoOneIsHere

@NoOneIsHere La panique du noyau ne s'arrête jamais avec cette version, et ici la mémoire est effacée, elle n'est pas remplie d'octets aléatoires.
TuxCrafting

0

Lot, 15 octets

:A
start
goto A

Ne fait que saturer la mémoire en temps linéaire en démarrant des cmd.execentaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des centaines, des des centaines et des centaines et des centaines et des centaines et des centaines et des centaines de fois.

Il y a un mortel (mais probablement non-concurrence) programme de 24 octets qui démarre lui - même encore et encore, débordant ainsi la mémoire en temps logarithmique (c. -à- mettre à jour votre RAM ne retarde pas l'accident). Supposons que le code ci-dessous se trouve dans C:\a.bat:

:A
start C:\a.bat
goto A

.

Honnêtement, j'ai peur d'essayer ceux-ci.


Est-ce que quelqu'un a remarqué que ce dernier programme est une fourchette?
Dorukayhan veut que Monica revienne le

Oui je l'ai fait. :() { : | : & }; :
NoOneIsHere

pourquoi ne pas au @0lieu de C:\a.bat?
Johannes Kuhn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.