Saya sedang mencari (apakah saya?) Untuk sepotong kode yang segera berhenti - dengan cara yang benar-benar tidak konvensional.
Ini tidak berarti: System.exit((int) 'A');
(Jawa).
Itu mungkin berarti:
#!/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()
Jawaban yang paling banyak menang menang! Semua bahasa, semua arsitektur.
Sunting: Berhenti dengan melempar pengecualian tidak akan diterima lagi!
exit()
, tetapi masih merupakan fitur yang diimplementasikan ...Jawaban:
bash, 6 karakter
exec
menggantikan proses saat ini dengan sesuatu yang lain.[
adalah perintah terpendek yang dapat saya temukan yang tidak berbahaya (ini alias untuktest
)sumber
exec
'ing[
perintah :)~ $ echo $PATH/?
->/bin/X /bin/[ /bin/w
. Kerang ikan memberi saya dua perintah lain.w
menarik menurut saya.Pesta
Hentikan program secepat yang dapat bereaksi pengguna ;-)
sumber
Redcode
(Latar Belakang: Redcode adalah bahasa pseudo-assembly yang digunakan dalam game pemrograman Core War yang diperkenalkan oleh AK Dewdney pada tahun 1984. Ini biasanya menggunakan banyak kode modifikasi diri. Saya menulis tutorial kecil yang menyenangkan tentang pemrograman Redcode beberapa tahun yang lalu. )
Program instruksi tunggal ini tidak hanya membunuh dirinya sendiri, tetapi juga menghapus kode programnya sendiri dari memori, tanpa meninggalkan jejaknya dalam memori.
Membosankan, katamu? Lagipula, program di atas akan mati juga, bahkan jika belum ditimpa kodenya. OK, ini salah satu yang membersihkan seluruh inti sebelum akhirnya menyeka dirinya sendiri dan sekarat:
Dua instruksi pertama benar-benar melakukan sebagian besar pekerjaan: itu hanya copy / lompatan sederhana yang menyalin sel instruksi kosong (yang diinisialisasi ke
DAT 0, 0
) setelah akhir program ke setiap sel berikutnya (menggunakan mode pengalamatan tidak langsung pasca kenaikan bertahap)>
), sampai pointer akhirnya membungkus ke awal memori dan menimpaMOV
di dalam loop itu sendiri. Setelah itu terjadi,JMN
(JuMp jika Bukan nol) mendeteksi dan jatuh.Masalahnya adalah bahwa ini masih membiarkan
JMN
dirinya sendiri tidak dihapus. Untuk menyingkirkan itu, kita perlu lagiMOV
untuk menyekaJMN
... tapi itu berarti kita belum perlu lagiMOV
untuk menyeka ituMOV
, dan sebagainya. Untuk membuat seluruh program hilang tanpa jejak, kita harus entah bagaimana mengatur satuMOV
instruksi untuk menghapus keduanya dan setidaknya satu instruksi lainnya.Di situlah
SPL
masuk - itu adalah salah satu opcode paling aneh di Redcode. Pada dasarnya, ini adalah instruksi "Cabang Kedua Cara". Anda lihat, alih-alih register "penghitung program" sederhana, seperti CPU normal lainnya, Redcode VM memiliki "proses antrian": daftar petunjuk yang berurutan untuk instruksi yang akan dieksekusi. Biasanya, pada setiap siklus, penunjuk instruksi digeser dari kepala antrian, instruksi dieksekusi dan instruksi berikutnya (kecuali ada lompatan atau instruksi ilegal) didorong ke ekor antrian. TetapiSPL
menyebabkan kedua instruksi berikutnya dan instruksi target yang diberikan (yang, dalam kasusSPL 1
, juga instruksi berikutnya) untuk didorong ke antrian.Hasil dari semua ini adalah bahwa, setelah dua
SPL 1
instruksi telah dieksekusi, sekarang ada empat proses dalam antrian, semua tentang eksekusi yang terakhirMOV
. Ini hanya cukup untuk menghapusJMN
, baikSPL
danMOV
sendiri, dan juga meninggalkanptr
sel instruksiDAT 0, 0
- tidak dapat dibedakan dari inti kosong yang mengelilinginya.(Atau, kita bisa mengganti
ptr
instruksi denganMOV 1, 1
, yang akan dikonversi menjadiMOV 1, 0
dengan instruksi sebelumnya, dan akan menghapus sendiri, seperti program pertama di atas lakukan.)Ps. Jika Anda ingin menguji program ini, unduh simulator Redcode (alias MARS). Saya akan merekomendasikan baik CoreWin atau YM pMARS , meskipun ada beberapa simulator baik lainnya juga.
sumber
MOV source, dest
. Tetapi seperti yang saya katakan, semua pengalamatan dalam Redcode adalah relatif, sehingga alamat0
sebenarnya berarti "alamat instruksi ini", sedangkan alamat1
sebenarnya berarti "alamat instruksi ini +1". (Dan alamat absolut 0 sama sekali tidak istimewa dalam Redcode; pada kenyataannya, satu konsekuensi menarik dari desain "semua alamat relatif" adalah bahwa sebenarnya tidak mungkin bagi program Redcode untuk menemukan alamat absolutnya sendiri di dalam inti! )C
Perhatikan bahwa ini bukan kode portabel. Ini bekerja dengan ZOG C pada ART DS9000 . Saya percaya bahwa penggunaan persenjataan yang tidak konvensional memenuhi syarat kode ini untuk tantangan ini. Jika Anda khawatir keterlambatan yang diperlukan untuk sepotong kode untuk mengirimkan payloadnya tidak memenuhi syarat segera , hubungi kami untuk saran tentang serangan pendahuluan.
Di mesin rumah saya, bahkan tidak dapat dikompilasi - saya tidak memiliki driver dan perpustakaan yang tepat. Saya pernah mendengar bahwa ada implementasi C yang populer di mana program ini mengkompilasi dan menjalankan efek yang kurang spektakuler, tetapi saya tidak pernah berani mencoba.
sumber
JavaScript
Cukup bernavigasi ke situs web ( lezat ) yang berbeda . :-)
Golf (10 karakter):
sumber
C #
Membunuh dirinya sendiri dengan membunuh setiap proses kecuali dirinya sendiri.
Untuk sedikit meningkatkannya, kita bisa
TerminateProcess
menggunakan PInvoke alih-alih menggunakanProcess.Kill
sumber
BASH - 12 karakter
Forkbomb klasik. Mengunci komputer dan memaksa pengguna (atau admin) untuk reboot.
sumber
:()
dan:|
Python (pada laptop lama)
Pada laptop lama dengan prosesor single core dan pendingin yang buruk:
Ketika laptop meledak (atau hanya mati) setelah beberapa jam, program tidak akan berjalan.
(Untuk hasil terbaik, bungkus laptop dengan selimut atau sesuatu)
sumber
Rubi
kill
s proses ruby / irb yang berjalan pada * nix.sumber
Apple 2 Basic
sumber
POKE
menulisEND
token di atasPRINT
token, dan yang keduaPOKE
menulis terminator perintah atas yang pertama"
. KetikaGOTO
dijalankan, itu berakhir berjalan danEND
bukannyaPRINT
program berakhir.Dalam pertemuan, sesuatu seperti ini mungkin akan berfungsi:
Saya ingat bahwa kompilasi ini benar-benar berfungsi DOS. Saat itu, itu reboot komputer.
sumber
PHP
Efek:
Menghapus file skrip jelek Anda dan kemudian membunuh program Anda.
Lemparkan salah satu dari anak nakal ini ke dalam basis kode untuk membingungkan orang.
sumber
quit
tetapi daftar parameter adalah kode untuk dijalankan. Saya mendapatkan kesalahan parse ketika mencoba menjalankannya.C, 9 karakter
Kompilasi dengan
gcc
dan kompiler lain yang tidak keberatan dengan detail kecil sepertimain
tidak berfungsi.Bekerja pada
x86
platform - program segera keluar.195 adalah opcode
ret
instruksi.sumber
main
terletak di.data
karena int, bukan di.text
, dan.data
dimuat ke halaman yang tidak dapat dieksekusi.Saya selalu ingin memposting ini di suatu tempat, saya kira cocok di sini meskipun sudah ada jawaban yang diterima.
Ini berfungsi pada sistem pos 4.3BSD dan lainnya yang menerapkan
revoke
dengan cara yang sama. Linux tidak meskipun ada prototipe untuk itu, MacOS melakukannya di masa lalu tetapi hanya mengembalikan kesalahan di versi terbaru.revoke
mengambil jalur ke file dan secara paksa menghancurkan semua referensi ke file itu. Ini termasuk pemetaan memori file itu, bahkan yang dapat dieksekusi itu sendiri. Jelas, Anda harus memulai program dengan path ke sana, ini tidak akan berhasil jika kebetulan berada di PATH.Variasi dari hal ini yang seharusnya bekerja pada kebanyakan sistem mirip-unix adalah:
Kami hanya menghapus peta halaman yang dipetakan
main
sehingga ketika panggilan untukmunmap
kembali, ia tidak memiliki tempat untuk kembali. Ada sedikit peluang fungsi dipanggilmunmap
hanya pada batas halaman dan kembalinya akan berhasil, jadi untuk memastikan ini berfungsi, kita mungkin harus mencoba untuk menghapus peta dua halaman terlebih dahulu.Dan tentu saja, variasi pada tema yang sama:
Hapus peta tumpukan sehingga kami tidak punya tempat untuk kembali. Peringatan yang sama dengan unmapping
main
- kita mungkin perlu memetakan dua halaman, kecuali bahwa kita harus ingat bahwa tumpukan mungkin tumbuh turun (kecuali Anda berada di PA-RISC atau beberapa arsitektur aneh lainnya seperti itu).Cara lain untuk menarik karpet dari bawah kaki Anda sendiri:
Ini tergantung pada sistem operasi dengan bagaimana sistem menangani batas cpu 0 detik dan seberapa sering perhitungan waktu cpu dilakukan. MacOS membunuh proses dengan segera, Linux membutuhkan loop sementara, sistem lain yang saya coba tidak melakukan apa-apa bahkan dengan batas satu detik dan loop sementara, saya tidak men-debug lebih lanjut.
sumber
SH
Panic kernal instan di Linux. Hancurkan semua proses, termasuk dirinya sendiri
Cmd
Layar biru instan di Windows. Mengakhiri
Client/Server Runtime SubSystem
. Pskill harus diinstal.sumber
killall init
Juga akan bekerjasudo killall init
Dalam C (Kompatibel Windows / Linux / (mungkin Unix / Freed BSD juga)):
Contoh penggunaan:
Di bawah kompilasi Windows dengan:
Dan Linux:
Dengan asumsi kompiler diinstal dan dalam variabel PATH saat ini.
EDIT: Secara teknis ia melempar pengecualian (dimunculkan oleh prosesor) di Linux, tetapi tidak ada pesan seperti itu di Windows. Jadi entri ini mungkin tidak valid; namun saya pikir itu keren: P
EDIT: Di assembler x86 (menggunakan NAsm / YAsm)
Kompilasi dengan:
(Windows)
(Linux)
Sayangnya cara ini juga menghasilkan dump inti di linux, jadi saya percaya ini secara fungsional setara dengan metode C; kecuali lebih efisien.
sumber
-Wall -Wextra -std=c99 -pedantic
dan tidak ada peringatan sama sekali.Mengambil hal-hal secara harfiah dengan cara konyol dengan Haskell:
sumber
Python
Menggunakan satu
multiprocessing
modul , kita dapat menelurkan thread lain yang tugasnya adalah untuk berkomunikasi dengan proses asli melalui antrian, mengatakan ketika berhenti:sumber
ANSI C
Tanpa optimasi kode, program berikut berhenti dengan sangat cepat - sebenarnya tidak dapat diluncurkan meskipun dikompilasi menjadi program yang valid
ini mungkin bergantung pada sistem - komentar jika Anda dapat meluncurkannya.
sumber
Baik. Jika hanya menelepon
System.exit
tidak diizinkan di Jawa, bagaimana kalau memanggilnya melalui refleksi dari utas lainnya?Mencari metode keluar, menumbuhkan utas baru, dan menghitung
mundurhingga utas itu membunuh proses dengan memanggil keluar melalui refleksi.sumber
bahasa mesin x86, 1 karakter
Anda biasanya dapat membuat executable dapat dijalankan dari satu instruksi RET
sumber
C (Linux)
Versi bunuh diri
Mengirimkan SIGKILL ke dirinya sendiri.
Versi "Tu quoque mi fili"
Garpu, lalu putranya membunuh ayah.
sumber
Perl
Itu semuanya.
Penjelasan: Ini melempar pengecualian
Unimplemented
dan segera keluar.sumber
Batch & Debug
Sebuah oldie but goodie, bekerja pada mesin DOS untuk reboot sistem instan. Bonus dalam hal ini adalah satu skrip yang dimaksudkan untuk ditafsirkan oleh dua penafsir yang berbeda dan tidak kompatibel.
reset.bat
Interpretasi file batch melompati instruksi yang dimaksudkan untuk debug, dan mengumpankan dirinya ke debug untuk interpretasi. Baris kosong setelah
goto
diperlukan untuk menghapus kesalahan dalamdebug
hasil itu karena itu diberi perintah yang tidak diketahui, yaitu goto.sumber
Jawa
Kode di bawah ini tidak diuji dan hanya akan berfungsi pada beberapa platform.
sumber
sudo reboot
, pada Windowsshutdown /r /t 0
sudo java Quitter
.Powershell
Simpan ini sebagai 'lastresort.ps1' dan itu harus melakukan trik.
Jika Anda mengalami masalah dengan skrip tidak dijalankan karena beberapa kebijakan bodoh, ketikkan ini sebelum menjalankan skrip:
sumber
TI-Basic 84
sumber
Python (alternatif satu baris ke OP)
Saya pikir sebenarnya tidak ada jawaban Python yang lebih baik daripada yang disarankan OP, tapi saya tidak suka bagaimana itu begitu banyak baris, jadi inilah cara Anda melakukan persis seperti yang dilakukan OP tetapi dalam satu baris:
Anda dapat membuat ini berfungsi dan itu akan melakukan pekerjaan untuk Anda.
sumber
Ide saya sendiri, tidak ikut
TIGCC (untuk Texas Instrumens TI-89, TI-89 Titanium, TI-92 +, TI-V200)
TI-Basic untuk kalkulator yang sama
Apa yang dilakukan oleh program: Pertama menghapus sendiri dari RAM. (Jangan menaruhnya di ROM atau tidak akan berfungsi ...) Itu masih bisa berjalan karena pada pelaksanaan salinan program dibuat dan dijalankan.
asm(trap #2);
memanggil perintah ASM4E424E750000
, yang merupakan perintah untuk mengatur ulang kalkulator, hapus RAM-nya (Flash ROM tidak tersentuh) dan instal ulang semua aplikasi.EDIT: Baru saja menguji versi Basic. Itu tidak bisa menghapus sendiri ...
sumber
Format MS-DOS .com
Itu menulis instruksi yang tidak valid (FFFF) ke dalam memori dan kemudian mengeksekusi mereka, membuat NTVDM crash.
Heksadesimal
Bahasa assembly Debug.exe
sumber