Songphon's profileSongphon's amusing blog.PhotosBlogListsMore Tools Help

Blog


    5/2/2009

    Compiler and its reverse operation.

    คอมไพล์เลอร์คือตัวแปลงภาษา ซึ่งโดยทั่วไปหมายถึงการแปลภาษาระดับสูงไปเป็นภาษาระดับต่ำ
    โดยที่ในระหว่างขบวนการนี้เอง สิ่งที่เกิดจริงๆคือการละทิ้งข้อมูลระดับ Abstraction ตัวอย่างเช่นคำสั่ง
    for, while หรือแม้แค่เงื่อนไข if then else ก็จะไม่มีอีกต่อไปในภาษาระดับต่ำ

    คำถามมีอยู่ว่าเป็นไปได้หรือไม่ที่จะสร้างกระบวนการย้อนกลับ ผมจะไม่ใช้คำว่า Decompiler เนื่องจาก
    โดยทั่วไปหมายถึงการแปลงภาษาเครื่องให้กลับเป็นภาษาระดับสูง แต่ information หรือ abstraction บางอย่างจะหายไป
    โดยที่เราไม่สามารถกู้คืนมาได้โดยง่าย

    ยกตัวอย่างเช่นการคอมไพล์โค้ดของฟังก์ชันคำนวณภาษีมูลค่าเพิ่ม 7% เมื่อถูกแปลงเป็นภาษาเครื่อง
    ในมุมมองของเรา “มนุษย์” เรามีบริบทแวดล้อมที่สามารถบอกเราได้ว่าลักษณะโครงสร้างแบบนี้มีไว้
    เพื่อคำนวณอัตราส่วนร้อยละ และ 7 อาจจะหมายถึง 7% ซึ่งเมื่อรวมเข้ากับความรู้ที่ว่าโค้ดนี้เป็นผลลัพธ์ของ
    การคอมไพล์ตัวคำนวณภาษี เราสามารถรู้ได้ว่าจริงๆแล้ว “abstraction” ของชุด instruction นี้มีไว้คำนวณภาษี

    แต่การทำแบบนี้ด้วยโปรแกรมนั้น ไม่ง่าย คำถามมีอยู่ว่าเป็นไปได้หรือไม่ที่จากสร้างกระบวนการที่เปลง concrete instruction
    ให้กลับเป็น abstraction เหมือนเดิมและสามารถให้เหตุผลกับ abstraction นั้นได้อย่างถูกต้อง โดยกำหนด
    บริบทเริ่มต้นให้ เช่น โปรแกรมอะไร มีอินพุทอะไร เอาพุทอะไร

    ซึ่งถ้าเราสามารถทำได้ดังนี้ความสามารถในการเข้าใจตัวเองของคอมพิวเตอร์ก็จะไม่ถูกกำจัดอีกต่อไป…