CJK Workbench
เวิร์กโฟลว์

Reverse engineering ภาคปฏิบัติ ทีละฟังก์ชัน

03
สถานการณ์

เริ่มวิศวกรรมย้อนกลับภาคปฏิบัติอย่างไร

เลือกฟังก์ชันเล็ก ๆ หนึ่งฟังก์ชันจากโปรแกรม C ที่คุณคอมไพล์เอง แล้วศึกษาตั้งแต่คำสั่งแรกจนถึง return สุดท้าย กฎหมายและเงื่อนไขใบอนุญาตแตกต่างกันตามประเทศ จึงใช้เฉพาะโค้ดของคุณเองหรือไฟล์ฝึก มีสี่ขั้นตอนด้านล่าง

01

เปิดโฟลเดอร์โปรเจกต์ของคุณ

เลือกโฟลเดอร์ทำงานที่มีซอร์ส C สำเนาไฟล์ที่คอมไพล์แล้ว และต่อมาคือลิสติงที่ส่งออก

02

ส่งออกลิสติงเป็นข้อความ

ให้ Shell รันคำสั่งส่งออกของดิสแอสเซมเบลอร์กับสำเนา หรือบันทึกลิสติงเอง เพื่อให้ผลลัพธ์เป็นไฟล์ข้อความ

03

ขอคำอธิบาย

ขอให้เอเจนต์อ่านลิสติงและอธิบายฟังก์ชันทีละบรรทัด แล้วบันทึกโน้ตด้วย write_file

04

ตรวจสอบคำตอบ

เทียบบันทึกกับซอร์สและลิสติงของคุณ อ่าน diff ใน Ask first และทดสอบผลในห้องแล็บหากถูกกฎหมาย

ลิสติงสำหรับการสอนให้อ่าน

add_numbers.asm
; add_numbers.asm - teaching listing, x64 Windows
; Returns the sum of its first two integer arguments.
; Argument 1 arrives in ecx (low half of rcx).
; Argument 2 arrives in edx (low half of rdx).
add_numbers:
    mov eax, ecx    ; copy argument 1 into eax
    add eax, edx    ; add argument 2, the sum stays in eax
    ret             ; return to the caller, result in eax

ฟังก์ชันนี้บวกจำนวนเต็มสองค่า ตามข้อตกลง Windows x64 อาร์กิวเมนต์มาถึงใน ecx และ edx ผลรวมถูกสร้างใน eax และ ret คืนการควบคุมให้ผู้เรียก

สองแบบฝึกหัดสำหรับชั้นเรียน reverse engineering

เริ่มด้วยฟังก์ชันที่คุณเขียนเอง

คำถามที่มือใหม่ถามบ่อยคือจะเริ่มแอสเซมบลีอย่างไร และคำตอบคือฟังก์ชันที่คุณเขียนเอง เขียนฟังก์ชัน C สั้น ๆ คอมไพล์ แล้วส่งออกลิสติงเป็นข้อความ read_file เปิดลิสติงและเอเจนต์อธิบายทุกคำสั่ง ได้แก่ รีจิสเตอร์ใดเก็บอาร์กิวเมนต์ใด สแตกทำอะไร และผลลัพธ์คืนที่ใด write_file บันทึกคำอธิบายเหล่านั้นใน notes/begin.md ใน Plan only เอเจนต์จะลิสต์ขั้นตอนเหล่านี้ก่อน ยังไม่มีอะไรรัน จากนั้นสลับไป Ask first และอ่าน diff ก่อนบันทึกทุกครั้ง สุดท้ายเทียบบันทึกกับซอร์สของคุณ และถ้าถูกกฎหมาย ให้ทดสอบฟังก์ชันที่คอมไพล์แล้วในห้องแล็บ

จัดทำเอกสารฟังก์ชันของไลบรารีของคุณเอง

แบบฝึกหัดที่ดีในการวิศวกรรมย้อนกลับ API คือลิสต์ฟังก์ชันที่ไลบรารีของคุณเองเปิดให้ใช้ และจดว่าแต่ละอาร์กิวเมนต์ทำอะไร บันทึกรายการฟังก์ชันที่นำเข้าและเปิดให้ใช้จากเครื่องมือของคุณเป็นข้อความ จากนั้นเอเจนต์ใช้ grep หาทุกการเรียกฟังก์ชันหนึ่ง และใช้ read_file เปิดบรรทัดรอบ ๆ มันร่างตารางใน notes/api.md และ edit_file แสดงทุกการเปลี่ยนแปลงเป็น diff เริ่มจากฟังก์ชันเดียว วิธีเดียวกันนี้ช่วยให้คุณกู้คืนวิธีทำงานของโค้ดเก่าของคุณเองได้ด้วย เอเจนต์อาจผิดเรื่องชนิดข้อมูลหรือวัตถุประสงค์ จึงเทียบทุกแถวกับซอร์สและการทดสอบของคุณเองก่อนยอมรับ

CJK Workbench สำหรับ Windows

ลองทำตามตัวอย่างของคุณเอง

ดาวน์โหลด CJK Workbench ↗