Estou procurando (estou?) Por um pedaço de código que saia imediatamente - de uma maneira absolutamente não convencional.
Isso não significa: System.exit((int) 'A');
(Java).
Isso pode significar:
#!/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()
A resposta mais votada vence! Todas as línguas, todas as arquiteturas.
Edit: Parar de lançar exceções não será mais aceito!
exit()
, mas ainda assim é um recurso implementado ...Respostas:
bash, 6 caracteres
exec
substitui o processo atual por outra coisa.[
é o comando mais curto que eu achei inofensivo (é um apelido paratest
)fonte
exec
'ing o[
comando :)~ $ echo $PATH/?
->/bin/X /bin/[ /bin/w
. Casca de peixe me deu dois outros comandos.w
é interessante na minha opinião.Bater
Encerra o programa o mais rápido que o usuário pode reagir ;-)
fonte
Código vermelho
(Contexto: Redcode é a linguagem de pseudo-montagem usada no jogo de programação Core War , introduzido por AK Dewdney em 1984. Geralmente, faz uso pesado de código auto-modificável. Escrevi um pequeno e agradável tutorial sobre programação de Redcode há alguns anos. )
Este programa de instrução única não apenas se mata, mas também limpa seu próprio código de programa da memória, deixando nenhum rastro na memória.
Chato, você diz? Afinal, o programa acima teria morrido de qualquer maneira, mesmo que não tivesse sobrescrito seu código. OK, aqui está uma que limpa todo o núcleo antes de finalmente se limpar e morrer:
As duas primeiras instruções realmente fazem a maior parte do trabalho: é apenas um loop de cópia / salto simples que copia a célula de instrução em branco (inicializada
DAT 0, 0
) após o final do programa para cada célula subsequente (usando o modo de endereçamento indireto pós-incremento>
), até que o ponteiro finalmente passe para o início da memória e substitua oMOV
próprio loop.JMN
Quando isso acontece, o (JuMp se não zero) o detecta e cai.O problema é que isso ainda não
JMN
se limpa. Para nos livrarmos dele, precisamos de outroMOV
para limpar oJMN
... mas isso significa que precisamos de outroMOV
para limpar issoMOV
, e assim por diante. Para fazer com que o programa inteiro desapareça sem deixar rastro, precisamos de alguma forma organizar uma únicaMOV
instrução para limpar a si mesma e pelo menos uma outra instrução.É aí que
SPL
entra - é um dos códigos mais estranhos do Redcode. Basicamente, é uma instrução "Ramificar as duas formas". Você vê, em vez de um simples registro de "contador de programas", como qualquer CPU normal teria, a VM Redcode possui uma "fila de processos": uma lista cíclica de indicadores para instruções a serem executadas. Normalmente, em cada ciclo, um ponteiro de instrução é deslocado para fora da cabeça da fila, a instrução é executada e a próxima instrução (a menos que tenha havido um salto ou uma instrução ilegal) é empurrada para a cauda da fila. MasSPL
faz com que a próxima instrução e a instrução de destino fornecida (que, no caso deSPL 1
, também sejam a próxima instrução) sejam empurradas para a fila.O resultado disso é que, depois que as duas
SPL 1
instruções foram executadas, agora existem quatro processos na fila, todos sobre a execução da últimaMOV
. Isso é apenas o suficiente para limpar oJMN
, seSPL
e oMOV
próprio, e também deixa aptr
célula de instrução comoDAT 0, 0
- indistinguível do núcleo vazio ao seu redor.(Como alternativa, poderíamos ter substituído a
ptr
instrução porMOV 1, 1
, a qual teria sido convertidaMOV 1, 0
pelas instruções anteriores e, portanto, seria eliminada, como o primeiro programa acima.)Ps. Se você quiser testar esses programas, baixe um simulador de Redcode (também conhecido como MARS). Eu recomendaria o CoreWin ou o venerável pMARS , embora também existam vários outros bons simuladores.
fonte
MOV source, dest
. Mas como eu disse, todo endereçamento no Redcode é relativo, então o endereço0
realmente significa "o endereço desta instrução", enquanto o endereço1
realmente significa "o endereço desta instrução + 1". (E o endereço absoluto 0 não é de forma alguma especial no Redcode; de fato, uma conseqüência interessante do design de "todos os endereços relativos" é que é realmente impossível para um programa Redcode encontrar seu próprio endereço absoluto no núcleo! )C
Observe que este não é um código portátil. Funciona com o ZOG C no ART DS9000 . Acredito que o uso de armamentos não convencionais qualifica esse código para esse desafio. Se você estiver preocupado com o fato de o atraso necessário para que esse código entregue sua carga útil não se qualifique imediatamente , entre em contato conosco para obter orientações sobre ataques preventivos.
Na minha máquina doméstica, ele nem compila - eu não tenho os drivers e bibliotecas corretos. Ouvi dizer que existem implementações populares de C em que esse programa é compilado e executado com efeitos menos espetaculares, mas nunca tive coragem de tentar.
fonte
Javascript
Basta navegar para um site ( delicioso ) diferente . :-)
Golfe (10 caracteres):
fonte
C #
Se mata matando todos os processos, menos ele próprio.
Para apimentar um pouco, poderíamos Invocar em
TerminateProcess
vez de usarProcess.Kill
fonte
BASH - 12 caracteres
Forkbomb clássico. Bloqueia o computador e força o usuário (ou administrador) a reiniciar.
fonte
:()
e:|
Python (em laptops antigos)
Em laptops antigos com processadores de núcleo único e problemas de refrigeração:
Quando o laptop explodir (ou simplesmente desligar) após algumas horas, o programa não estará em execução.
(Para obter melhores resultados, enrole o laptop em um cobertor ou algo assim)
fonte
Rubi
kill
o processo em execução ruby / irb no * nix.fonte
Apple 2 Basic
fonte
POKE
grava umEND
token sobre oPRINT
token e, em seguida, o segundoPOKE
grava um terminador de comando sobre o primeiro"
. Quando oGOTO
é executado, ele acaba sendo executado emEND
vez dePRINT
e o programa termina.Na montagem, algo assim provavelmente funcionaria:
Lembro que compila isso realmente funcionou no DOS. Naquela época, ele reiniciava o computador.
fonte
PHP
Effects:
Deletes your crappy script file and then kills your program.
Throw one of these bad boys into some codebase to confuse people.
fonte
quit
but the parameter list is code to run. I get a parse error when trying to run it.C, 9 chars
Compiles with
gcc
and other compilers who don't mind about petty details likemain
not being a function.Works on
x86
platforms - the program immediately exits.195 is the opcode of the
ret
instruction.fonte
main
is located in.data
because it's an int, not in.text
, and.data
is loaded into an non-executable page.I always wanted to post this somewhere, I guess it fits here even though there's already an accepted answer.
This works on any post 4.3BSD system and others that implement
revoke
in the same way. Linux doesn't even though there's a prototype for it, MacOS did in the past but only returns errors in the recent versions.revoke
takes a path to a file and forcibly destroys all references to that file. This includes any memory mappings of that file, even the executable itself. Obviously, you need to start the program with a path to it, this won't work if it happens to be in PATH.A variation of this that should work on most unix-like systems is:
We just unmap the page that maps
main
so that when the call tomunmap
returns, it doesn't have anywhere to return to. There's a slight chance that the the function call tomunmap
is just on a page boundary and the return will succeed, so to be perfectly sure this works, we probably have to attempt to unmap two pages first.And of course, a variation on the same theme:
Just unmap the stack so that we don't have anywhere to return to. Same caveat as unmapping
main
- we might need to unmap two pages, except that we have to remember that the stack probably grows down (unless you're on PA-RISC or some other strange architecture like that).Another way to pull the rug from under your own feet:
It is operating system dependent with how the system handles a 0 second cpu limit and how often accounting for cpu time is done. MacOS kills the process immediately, Linux requires the while loop, another system I tried didn't do anything even with a one second limit and a while loop, I didn't debug further.
fonte
sh
Instant kernal panic on Linux. Destorys all processes, including itself
Cmd
Instant blue screen on Windows. Terminates the
Client/Server Runtime SubSystem
. Pskill must be installed.fonte
killall init
also work?sudo killall init
In C (Compatible Windows / Linux / (probably Unix / Freed BSD too)):
Usage example:
Under Windows compile with:
And Linux:
Assuming the compiler is installed and in the currenth PATH variable.
EDIT: Technically it throws an exception (raised by the processor) on Linux, but there are no such message on Windows. So this entry probably is not valid; however I think it's cool :P
EDIT: In x86 assembler (using NAsm/YAsm)
Compile with:
(Windows)
(Linux)
Unfortunately this way also produces a core dump on linux, so I believe it's functionally equivalent to the C method; except more efficient.
fonte
-Wall -Wextra -std=c99 -pedantic
and there are no warnings at all.Taking things literally in a silly way with Haskell:
fonte
Python
Using the
multiprocessing
module, we can spawn another thread whose job is to communicate with the original process through a queue, telling it when to quit:fonte
ANSI C
With no code optimisation the following program quits so fast - it can actually not be launched even though it compiles into a valid program
this may be system dependent - comment if you can launch it.
fonte
Okay. If simply calling
System.exit
isn't permitted in Java, how about calling it via reflection from another thread?Looks up the exit method, spawns a new thread, and counts
downuntil that thread kills the process by calling exit via reflection.fonte
x86 machine language, 1 character
You can usually make a workable executable out of one RET instruction
fonte
C (Linux)
Suicide version
Sends a SIGKILL to itself.
"Tu quoque mi fili" version
Forks, then the son kills the father.
fonte
Perl
That is all.
Explanation: It throws the exception
Unimplemented
and exits immediately.fonte
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.fonte
Java
The below code is not tested and will only work on some platforms.
fonte
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:
fonte
TI-Basic 84
fonte
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.
fonte
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...
fonte
MS-DOS .com format
It writes invalid instructions (FFFF) into the memory and then executes them, making NTVDM crash.
Hexadecimal
Debug.exe assembly language
fonte