Leet (programovací jazyk) - Leet (programming language)
tento článek potřebuje další citace pro ověření.Dubna 2014) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Leet (nebo L33t) je esoterický programovací jazyk volně založený na Brainfuck a pojmenován pro podobnost jeho zdrojového kódu se symbolickým jazykem "L33t 5p34k L33t navrhl Stephen McGreal[1] a Alex Mole, aby byli co nejasnější. to je Turing-kompletní a má možnost samočinně se měnící kód. Software napsané v tomto jazyce mohou vytvářet síťová připojení, a proto je lze použít k jejich zápisu malware.[Citace je zapotřebí ]
Specifikace jazyka
Základní datovou jednotkou L33t je nepodepsaný bajt (big-endian ), které mohou představovat hodnoty a čísla ASCII v rozsahu 0-255.
Zdrojový kód je ve formátu „l33t 5p34k“ a slova jsou oddělena mezerami nebo znaky konce řádku. Jazyk používá 10 operačních kódů a každé slovo ve zdrojovém kódu je přeloženo do operačního kódu přidáním všech číslic ve slově dohromady, např. l33t = 3 + 3 = 6. V kódu není nutné používat nic jiného než číslice.
Jazyk používá 64K blok paměti a 2 ukazatele - ukazatel paměti a ukazatel instrukce. Interpret l33t tokenizuje všechna slova ve zdroji, aby vytvořil posloupnost číselných operačních kódů, a umístí je v pořadí do paměťového bloku, počínaje bajtem 0. Ukazatel instrukce se bude zvyšovat, dokud nenarazí na END. Ukazatel paměti začíná na prvním bajtu po pokynech. Paměť se „zalomí“: zvýšení paměti a ukazatele instrukce kolem 64 kB způsobí její běh na bajt 0 a naopak.
Ukazatele paměti lze také přesunout do oblasti paměti obsazené instrukcemi, takže kód lze samostatně upravit na runtime. Podobně bude ukazatel instrukce pokračovat v přírůstku nebo skákání, dokud nenarazí na END, takže kód lze vygenerovat za běhu a následně provést.
Operační kódy
HODNOTA | OPCODE | POPIS |
---|---|---|
0 | NOP | Žádná operace, s výjimkou zvýšení ukazatele instrukce. |
1 | WRT | Zapíše hodnoty ASCII bajtu pod ukazatelem paměti na aktuální připojení (viz CON). Zvyšuje ukazatel instrukce. |
2 | RD | Přečte znak z aktuálního připojení (viz CON) a zapíše jej do bajtu aktuálně pod ukazatelem paměti. Zvyšuje ukazatel instrukce. |
3 | LI | Přesune ukazatel instrukce dopředu na příkaz následující za odpovídajícím EIF, pokud je bajt pod ukazatelem paměti roven nule. Pokud se bajt pod ukazatelem paměti nerovná nule, IF jednoduše zvýší ukazatel instrukce. |
4 | EIF | Přesune ukazatel instrukce zpět na příkaz následující po odpovídajícím IF, pokud se bajt pod ukazatelem paměti nerovná nule. Pokud se bajt pod ukazatelem paměti rovná nule, EIF jednoduše zvýší ukazatel instrukce. |
5 | FWD | Přesunout ukazatel paměti dopředu o (další slovo + 1) bajtů. Přidá 2 k ukazateli instrukce. |
6 | BAK | Přesunout ukazatel paměti zpět o (další slovo + 1) bajtů. Přidá 2 z ukazatele instrukce. |
7 | INC | Zvýšit hodnotu bajtu pod ukazatelem paměti o (další slovo + 1). Přidá 2 k ukazateli instrukce. |
8 | DEC | Snížení hodnoty bajtu pod ukazatelem paměti o (další slovo + 1). Přidá 2 k ukazateli instrukce. |
9 | OŠIDIT | Přečte 6 bajtů počínaje ukazatelem paměti (první 4 bajty specifikující IP ve formátu 127.0.0.1 a poslední 2 bajty kombinující 16bitové číslo portu *), a pokud je to možné, otevře připojení. Pokud připojení nelze otevřít, l33t vrátí chybovou zprávu: „h0s7 5uXz0r5! c4N'7 c0Nn3 <7 l0l0l0l0l l4m3R !!!“. a resetovat aktuální připojení na poslední úspěšné (stdin / stdout, pokud neexistují žádné předchozí úspěšné připojení).
|
10 | KONEC | Ukončí všechna otevřená připojení a ukončí program. Hodnota 10 program neukončí, pokud se použije jako data pro operační kódy FWD, BAK, INC nebo DEC. |
Hmyz
F00l! teh c0d3 1s b1g3R th4n teh m3m0ry !! 1!
Pokusili jste se načíst program, který je příliš velký na to, aby se vešel do paměti. Všimněte si, že v době kompilace je pro vyrovnávací paměť rezervován jeden bajt, takže velikost programu musí být menší než velikost paměti minus jeden bajt.
Byt3 s1z3 musí být na l34st 11, n00b!
Argument byte_size parametru new () byl menší než 11. Velikost bajtu tlumočníka musí být alespoň 11 (pro přizpůsobení pro opcodes).
L0L !! 1! 1 !! n0 l33t pr0gr4m l04d3d, sUxX0r!
run () zavolal před načtením libovolného programu.
Tlumočníci
Krajta
Napsal Alex Mole. Tlumočník dokáže číst zdroj z textových souborů, takže jej můžete spustit z příkazového řádku tak, že přejdete do složky l33t.py a program je a zadáte: l33t.py
V současné době nepodporuje operační kód CON, ale jinak funguje dobře. Alespoň prozatím by měla být verze Pythonu považována za „definitivní“ implementaci tlumočníka (kromě omezení podpory CON), což znamená, že pokud budete psát tlumočníka, měl by se chovat stejně jako Python jeden, pokud je to možné.
Rubín
Napsal Eric Redmond. Ten obsahuje implementaci CON.
JavaScript
Phil McCarthy je založen na Pythonu, ale je trochu interaktivnější, což je hezké. Viz také jeho tlumočníka pro konzervativní programovací jazyk, který je hluboce hloupý a nápadně se podobá l33t; o)
C
Tlumočníky pro C napsal Kuisma Salonen (pro použití v Linuxu) a Alecs King.
Perl 6
Autor: Gaal Yahas. Tento interpret je pozoruhodný tím, že je první, který je dodáván s debuggerem.