โพสต์ที่ยอดเยี่ยมของ psoul ตอบคำถามของคุณดังนั้นฉันจะไม่ทำซ้ำงานที่ดีของเขา แต่ฉันรู้สึกว่ามันช่วยอธิบายได้ว่าทำไมนี่เป็นคำถามที่ถูกต้องสมบูรณ์แบบ ท้ายที่สุดนี่คือสถานที่สำหรับการเรียนรู้ใช่ไหม?
โปรแกรมคอมพิวเตอร์สมัยใหม่นั้นผลิตขึ้นตามชุดของการแปลงเริ่มต้นด้วยการป้อนคำสั่งข้อความที่มนุษย์สามารถอ่านได้ (เรียกว่า "ซอร์สโค้ด") และลงท้ายด้วยคำสั่งที่คอมพิวเตอร์สามารถอ่านได้ (เรียกอีกอย่างว่า "ไบนารี่" หรือ "เครื่องจักร" รหัส").
วิธีที่คอมพิวเตอร์ใช้ชุดคำสั่งรหัสเครื่องนั้นง่ายมากในที่สุด แต่ละแอ็คชันที่โปรเซสเซอร์สามารถใช้ (เช่นอ่านจากหน่วยความจำเพิ่มสองค่า) จะแสดงด้วยรหัสตัวเลข ถ้าฉันบอกคุณว่าหมายเลข 1 หมายถึงเสียงกรีดร้องและหมายเลข 2 หมายถึงหัวเราะคิกคักแล้วถือไพ่ด้วยเลข 1 หรือ 2 หมายถึงพวกเขาคาดหวังว่าคุณจะกรีดร้องหรือหัวเราะคิกคักตามฉันจะใช้สิ่งที่เป็นระบบเดียวกันกับคอมพิวเตอร์ ในการดำเนินงาน
ไฟล์ไบนารีเป็นเพียงชุดของรหัสเหล่านั้น (มักเรียกว่า "รหัส op") และข้อมูล ("ข้อโต้แย้ง") ที่รหัส op ทำหน้าที่
ตอนนี้ภาษาแอสเซมบลีเป็นภาษาคอมพิวเตอร์ที่แต่ละคำสั่งในภาษานั้นหมายถึง op-code หนึ่งเดียวบนโปรเซสเซอร์ มีการแปลโดยตรง 1: 1 ระหว่างคำสั่งภาษาแอสเซมบลีและรหัส op-processor นี่คือเหตุผลที่แอสเซมบลีการเข้ารหัสสำหรับโปรเซสเซอร์ x386 แตกต่างจากแอสเซมบลีการเข้ารหัสสำหรับตัวประมวลผล ARM
การถอดประกอบเป็นเพียงแค่นี้: โปรแกรมอ่านผ่านไบนารี่ (รหัสเครื่อง), แทนที่ op-codes ด้วยคำสั่งภาษาแอสเซมบลีที่เทียบเท่ากันและส่งผลลัพธ์เป็นไฟล์ข้อความ การเข้าใจสิ่งนี้เป็นสิ่งสำคัญ หากคอมพิวเตอร์ของคุณสามารถอ่านไบนารีได้คุณก็สามารถอ่านไบนารีได้ด้วยตนเองไม่ว่าจะด้วยตนเองพร้อมตาราง op-code ในมือของคุณ (ick) หรือผ่าน disassembler
Disassembler มีลูกเล่นใหม่ ๆ อยู่บ้าง แต่สิ่งสำคัญคือต้องเข้าใจว่าในที่สุดตัวแยกส่วนนั้นเป็นกลไกในการค้นหาและแทนที่ นี่คือเหตุผลว่าทำไม EULA ใดที่ห้ามไม่ให้เป่าลมร้อนในที่สุด คุณไม่สามารถอนุญาตให้คอมพิวเตอร์อ่านข้อมูลโปรแกรมได้ในเวลาเดียวกันและห้ามไม่ให้คอมพิวเตอร์อ่านข้อมูลของโปรแกรม
(อย่าเข้าใจฉันผิดมีความพยายามทำเช่นนั้นพวกเขาทำงานเช่นเดียวกับ DRM ในไฟล์เพลง)
อย่างไรก็ตามมีข้อควรระวังสำหรับวิธีการถอดแยกชิ้นส่วน ชื่อตัวแปรไม่มีอยู่จริง สิ่งนั้นไม่มีอยู่ใน CPU ของคุณ การเรียกห้องสมุดมีความสับสนว่าเป็นเรื่องนรกและมักจะต้องการแยกส่วนไบนารีเพิ่มเติม และการชุมนุมเป็นเรื่องยากที่จะอ่านในเงื่อนไขที่ดีที่สุด
โปรแกรมเมอร์มืออาชีพส่วนใหญ่ไม่สามารถนั่งอ่านภาษาแอสเซมบลีได้โดยไม่ต้องปวดหัว สำหรับมือสมัครเล่นมันจะไม่เกิดขึ้น
อย่างไรก็ตามนี่เป็นคำอธิบายที่ค่อนข้างแวววาว แต่ฉันหวังว่ามันจะช่วยได้ ทุกคนสามารถแก้ไขข้อผิดพลาดใด ๆ ในส่วนของฉันได้ สักพักหนึ่ง. ;)