กลับไปหน้าบทความ

อ่าน 1 นาที

ลีท (ภาษาโปรแกรม)

Leet (หรือL33t ) เป็นภาษาโปรแกรมเชิงลึกลับที่อิงตามBrainfuck อย่างหลวมๆ และตั้งชื่อตามความคล้ายคลึงของซอร์สโค้ดกับภาษาสัญลักษณ์ " L33t 5p34k " L33t ได้รับการออกแบบโดย Stephen...

ลีท (ภาษาโปรแกรม)

Leet (หรือL33t ) เป็นภาษาโปรแกรมเชิงลึกลับที่อิงตามBrainfuck อย่างหลวมๆ และตั้งชื่อตามความคล้ายคลึงของซอร์สโค้ดกับภาษาสัญลักษณ์ " L33t 5p34k " L33t ได้รับการออกแบบโดย Stephen McGreal [ 1 ]และ Alex Mole เพื่อให้เกิดความสับสนมากที่สุดเท่าที่จะเป็นไปได้ เป็นภาษาที่สมบูรณ์แบบตามทฤษฎีของ Turingและมีความเป็นไปได้สำหรับโค้ดที่แก้ไขตัวเองได้ซอฟต์แวร์ที่เขียนด้วยภาษานี้สามารถสร้างการเชื่อมต่อเครือข่ายได้ และด้วยเหตุนี้จึงอาจถูกนำไปใช้ในการเขียนมัลแวร์

ข้อกำหนดทางภาษา

หน่วยข้อมูลพื้นฐานของ L33t คือไบต์ที่ไม่มีเครื่องหมาย ( big-endian ) ซึ่งสามารถแทนค่า ASCII และตัวเลขในช่วง 0-255 ได้

โค้ดต้นฉบับอยู่ในรูปแบบ "l33t 5p34k" โดยแต่ละคำจะคั่นด้วยช่องว่างหรือการขึ้นบรรทัดใหม่ ภาษาดังกล่าวใช้โอเปอเรเตอร์โค้ด 10 ตัว และแต่ละคำในโค้ดต้นฉบับจะถูกแปลงเป็นโอเปอเรเตอร์โค้ดโดยการบวกตัวเลขทั้งหมดในคำนั้นเข้าด้วยกัน เช่น l33t = 3 + 3 = 6 ไม่จำเป็นต้องใช้อย่างอื่นนอกจากตัวเลขในโค้ด

ภาษานี้ใช้หน่วยความจำขนาด 64K และตัวชี้ 2 ตัว คือ ตัวชี้หน่วยความจำและตัวชี้คำสั่ง ตัวแปลภาษา l33t จะแยกคำทั้งหมดในซอร์สโค้ดออกเป็นลำดับของรหัสคำสั่งเชิงตัวเลข และจัดเรียงตามลำดับลงในบล็อกหน่วยความจำ โดยเริ่มต้นที่ไบต์ที่ 0 ตัวชี้คำสั่งจะเพิ่มขึ้นเรื่อยๆ จนกว่าจะพบคำว่า END ตัวชี้หน่วยความจำจะเริ่มต้นที่ไบต์แรกหลังจากคำสั่ง หน่วยความจำจะ "วนรอบ": การเพิ่มค่าตัวชี้หน่วยความจำและตัวชี้คำสั่งเกิน 64K จะทำให้มันวนกลับไปที่ไบต์ที่ 0 และในทางกลับกัน

ตัวชี้หน่วยความจำสามารถย้ายไปยังพื้นที่หน่วยความจำที่คำสั่งใช้งานอยู่ได้เช่นกัน ทำให้โค้ดสามารถแก้ไขตัวเองได้ในระหว่างการทำงาน ในทำนอง เดียวกัน ตัวชี้คำสั่งจะเพิ่มขึ้นหรือกระโดดต่อไปเรื่อยๆ จนกว่าจะพบคำว่า END ทำให้สามารถสร้างโค้ดในระหว่างการทำงานและดำเนินการได้ในภายหลัง

รหัสปฏิบัติการ

ค่า โอเปอเรชั่นโค้ด คำอธิบาย
0 โนป ไม่มีการดำเนินการใดๆ นอกจากการเพิ่มค่าตัวชี้คำสั่ง
1 ดับเบิลยูอาร์ที เขียนค่า ASCII ของไบต์ที่อยู่ใต้ตัวชี้หน่วยความจำไปยังการเชื่อมต่อปัจจุบัน (ดู CON) เพิ่มค่าตัวชี้คำสั่งขึ้นหนึ่งค่า
2 อาร์ดี อ่านอักขระจากช่องเชื่อมต่อปัจจุบัน (ดู CON) และเขียนลงในไบต์ที่อยู่ใต้ตัวชี้หน่วยความจำในปัจจุบัน เพิ่มค่าตัวชี้คำสั่งขึ้นหนึ่งค่า
3 ถ้า คำสั่ง IF จะเลื่อนตัวชี้คำสั่งไปข้างหน้าไปยังคำสั่งถัดจาก EIF ที่ตรงกัน หากไบต์ใต้ตัวชี้หน่วยความจำเท่ากับศูนย์ แต่ถ้าไบต์ใต้ตัวชี้หน่วยความจำไม่เท่ากับศูนย์ คำสั่ง IF จะเพิ่มค่าตัวชี้คำสั่งขึ้นหนึ่งค่าเท่านั้น
4 อีเอฟเอฟ คำสั่ง EIF จะเลื่อนตัวชี้คำสั่งย้อนกลับไปยังคำสั่งถัดจากคำสั่ง IF ที่ตรงกัน หากไบต์ใต้ตัวชี้หน่วยความจำไม่เท่ากับศูนย์ แต่ถ้าไบต์ใต้ตัวชี้หน่วยความจำเท่ากับศูนย์ คำสั่ง EIF จะเพิ่มค่าตัวชี้คำสั่งขึ้นหนึ่งค่า
5 ขับเคลื่อนล้อหน้า เลื่อนตัวชี้หน่วยความจำไปข้างหน้าเป็นระยะ (คำถัดไป + 1) ไบต์ เพิ่มค่าตัวชี้คำสั่งเป็น 2
6 บัค เลื่อนตัวชี้หน่วยความจำไปข้างหลังเป็นระยะ (คำถัดไป + 1) ไบต์ ลบ 2 ออกจากตัวชี้คำสั่ง
7 บริษัท อิงค์ เพิ่มค่าของไบต์ใต้ตัวชี้หน่วยความจำขึ้นทีละ (คำถัดไป + 1) เพิ่มค่าตัวชี้คำสั่งขึ้น 2
8 ธันวาคม ลดค่าของไบต์ใต้ตัวชี้หน่วยความจำลง (คำถัดไป + 1) เพิ่ม 2 ให้กับตัวชี้คำสั่ง
9 คอน อ่านข้อมูล 6 ไบต์โดยเริ่มจากตัวชี้หน่วยความจำ (4 ไบต์แรกระบุที่อยู่ IP ในรูปแบบ 127.0.0.1 และ 2 ไบต์สุดท้ายรวมกันเป็นหมายเลขพอร์ต 16 บิต*) และเปิดการเชื่อมต่อหากเป็นไปได้ หากไม่สามารถเปิดการเชื่อมต่อได้ l33t จะส่งข้อความแสดงข้อผิดพลาดกลับมา:
"h0s7 5uXz0r5! c4N'7 c0Nn3<7 l0l0l0l0l l4m3R !!!" 

และรีเซ็ตการเชื่อมต่อปัจจุบันเป็นการเชื่อมต่อที่สำเร็จครั้งล่าสุด (stdin/stdout หากไม่มีการเชื่อมต่อที่สำเร็จก่อนหน้านี้) หากอ่านค่าได้ 0 ทั้ง 6 ไบต์ l33t จะกลับไปใช้ stdin และ stdout ของเครื่องโลคัล (นี่คือการตั้งค่าเริ่มต้นเมื่อเริ่มโปรแกรม l33t) เพิ่มค่าตัวชี้คำสั่งไม่ว่าการเชื่อมต่อจะสำเร็จหรือไม่ ตัวชี้หน่วยความจำจะยังคงอยู่ที่เดิม มีเพียงคำสั่ง FWD และ BAK เท่านั้นที่เลื่อนตัวชี้หน่วยความจำ

  • หมายเลขพอร์ตสามารถคำนวณได้โดยใช้สูตรประมาณนี้: portNumber = (byte5 << 8) + byte
10 จบ ปิดการเชื่อมต่อที่เปิดอยู่ทั้งหมดและจบโปรแกรม ค่า 10 จะไม่ทำให้โปรแกรมจบการทำงานหากใช้เป็นข้อมูลสำหรับโอเปอเรเตอร์โค้ด FWD, BAK, INC หรือ DEC

แมลง

ฟ00ล! ใช่แล้ว c0d3 1s b1g3R ถึง 4n แล้ว m3m0ry!!1! 

คุณพยายามโหลดโปรแกรมที่มีขนาดใหญ่เกินกว่าจะเก็บไว้ในหน่วยความจำได้ โปรดทราบว่าในขั้นตอนการคอมไพล์ หน่วยความจำบัฟเฟอร์จะสงวนพื้นที่ไว้ 1 ไบต์ ดังนั้นขนาดของโปรแกรมจะต้องน้อยกว่าขนาดของหน่วยความจำลบด้วย 1 ไบต์

Byt3 s1z3 ต้องอยู่ที่ l34st 11 นะ ไอ้โง่! 

ค่า byte_size ของอาร์กิวเมนต์ new() น้อยกว่า 11 ไบต์ ขนาดของตัวแปลภาษาต้องมีอย่างน้อย 11 ไบต์ (เพื่อรองรับโอเปอเรเตอร์โค้ด)

แอล0ล!!1!1!! n0 l33t pr0gr4m l04d3d, sUxX0r! 

run() ถูกเรียกก่อนที่โปรแกรมใดๆ จะถูกโหลด

ล่าม

ไพธอน

เขียนโดย Alex Mole ไม่รองรับโอเปรนด์ CON แต่โดยทั่วไปถือว่าเป็นตัวแปลภาษาที่ "สมบูรณ์แบบ"

ทับทิม

เขียนโดย Eric Redmond บทความนี้มีการนำ CON มาใช้งาน

โค้ด JavaScript

พัฒนาโดยฟิล แมคคาร์ธี โดยอิงจากเวอร์ชัน Python แต่มีความโต้ตอบได้มากกว่าเล็กน้อย

ซี

โปรแกรมแปลภาษาสำหรับภาษา C นั้นเขียนขึ้นโดย Kuisma Salonen (สำหรับใช้ใน Linux) และโดย Alecs King

เพิร์ล 6

โดย Gaal Yahas โปรแกรมแปลภาษานี้โดดเด่นตรงที่เป็นโปรแกรมแรกที่มีตัวดีบักเกอร์ในตัว

  • เว็บไซต์อย่างเป็นทางการ
  • ลีท ออน เอโซลัง
  • Language-l33t-0.02 บน CPAN
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Leet_(programming_language)&oldid=1239721534 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ลีท (ภาษาโปรแกรม)

Leet (หรือL33t ) เป็นภาษาโปรแกรมเชิงลึกลับที่อิงตามBrainfuck อย่างหลวมๆ และตั้งชื่อตามความคล้ายคลึงของซอร์สโค้ดกับภาษาสัญลักษณ์ " L33t 5p34k " L33t ได้รับการออกแบบโดย Stephen...

ข้อกำหนดทางภาษา

หน่วยข้อมูลพื้นฐานของ L33t คือไบต์ที่ไม่มีเครื่องหมาย ( big-endian ) ซึ่งสามารถแทนค่า ASCII และตัวเลขในช่วง 0-255 ได้

รหัสปฏิบัติการ

และรีเซ็ตการเชื่อมต่อปัจจุบันเป็นการเชื่อมต่อที่สำเร็จครั้งล่าสุด (stdin/stdout หากไม่มีการเชื่อมต่อที่สำเร็จก่อนหน้านี้) หากอ่านค่าได้ 0 ทั้ง 6 ไบต์ l33t จะกลับไปใช้ stdin และ stdout ของเครื่องโลคัล (นี่คือการตั้งค่าเริ่มต้นเมื่อเริ่มโปรแกรม l33t)...

แมลง

คุณพยายามโหลดโปรแกรมที่มีขนาดใหญ่เกินกว่าจะเก็บไว้ในหน่วยความจำได้ โปรดทราบว่าในขั้นตอนการคอมไพล์ หน่วยความจำบัฟเฟอร์จะสงวนพื้นที่ไว้ 1 ไบต์ ดังนั้นขนาดของโปรแกรมจะต้องน้อยกว่าขนาดของหน่วยความจำลบด้วย 1 ไบต์