Source page: http://www.backerstreet.com/decompiler/introduction.htm
Giampiero Caprino จามเหมือนเจ้าชาย
บทนำ
ย้อนกลับ เป็นรูปแบบวิศวกรรมย้อนกลับของโปรแกรมคอมพิวเตอร์ เป้าหมายของมันคือการแปลงไฟล์ไบนารีที่คอมไพล์เป็นไฟล์ต้นฉบับ อาจต้องการทำเช่นนี้ด้วยเหตุผลหลายประการเช่นเพื่อทำความเข้าใจว่าโปรแกรมทำงานอย่างไรหรือพยายามแก้ไขโปรแกรมเพื่อปรับปรุงหรือแก้ไขข้อบกพร่อง
การรวบรวมข้อมูลนั้นมีมานานหลายปีอาจเป็นเพราะคนเริ่มคอมไพล์โปรแกรมจากภาษาระดับสูงไปจนถึงรูปแบบระดับล่างเช่นชุดประกอบและรหัสเครื่อง
มีความพยายามหลายครั้งในการเขียนตัวถอดรหัสปฏิบัติการไบนารี หน้านี้ มีตัวอย่างบางส่วน
มีตัวถอดรหัสเพิ่มเติมสำหรับสภาพแวดล้อมที่มีการจัดการซึ่งใช้รหัสไบต์เช่น Java และ C# รายการมากมายมีอยู่ที่ การแปลงโปรแกรมวิกิ
ในหน้าเหล่านี้เราจะมุ่งเน้นไปที่การแยกส่วนของไฟล์ปฏิบัติการไบนารีหรือจากรหัสเครื่องไปยังซอร์สโค้ดเนื่องจากเป็นเรื่องยากกว่าการถอดรหัส Java ไบต์รหัส หรือ C#
หลายภาษาและคอมไพเลอร์สามารถสร้างรหัสเครื่องรวมถึงคอมไพเลอร์ Java, C# และ Visual Basic บางตัว ดังนั้นตัวถอดรหัสต้องรู้ภาษาที่ใช้ในการคอมไพล์โปรแกรมและจะต้องมีการสนับสนุนเพื่อสร้างภาษานั้น อย่างไรก็ตามปัญหาที่ยากที่สุดในการแยกส่วนจะปรากฏขึ้นเมื่อใช้ภาษาที่มีข้อ จำกัด น้อยกว่าคือ C, Pascal หรือ C++
อัลกอริทึมส่วนใหญ่สามารถใช้ได้กับทุกภาษาดังนั้นเราจะใช้ตัวอย่างที่เขียนเป็นภาษาซีเป็นส่วนใหญ่เมื่อเราแสดงอัลกอริทึมเราจะใช้ C หรือ C++ เนื่องจากภาษาเหล่านี้เป็นภาษาที่มีอยู่มากที่สุดใน Linux และ Windows
เครื่องแปลภาษาส่วนใหญ่จะเกี่ยวข้องกับเอนทิตี 3 ชนิดโดยไม่คำนึงถึงภาษาเป้าหมาย
- วัตถุรหัส (ฟังก์ชั่นงบ)
- วัตถุข้อมูล (ตัวแปรทั่วโลกและท้องถิ่น)
- ประเภท (ประเภทตัวแปร, ฟังก์ชั่นต้นแบบ)
ปัญหาคงที่ของ ของคอมไพเลอร์ คือพยายามที่จะอนุมานหนึ่งหรือมากกว่าหนึ่งในสามหน่วยงานดังกล่าวข้างต้นจากลำดับของไบต์ที่พบในไฟล์ไบนารี ในการทำเช่นนี้มีประโยชน์ที่จะทราบว่าเครื่องมือการพัฒนา (ที่เราเรียกว่า ‘วิศวกรรมไปข้างหน้า’ เครื่องมือ) ใช้อย่างไรเมื่อเขียนโปรแกรมเนื่องจากเป็นกระบวนการที่เราพยายามเปลี่ยนกลับ