Zasm ให้ห้องสมุดที่ยืดหยุ่นและมีน้ำหนักเบามากในการจัดการและสร้างรหัส X86-64 โดยใช้ Zydis เป็นแบ็กเอนด์ Zasm เก็บทุกอย่างเป็นโหนดเช่นคำแนะนำข้อมูลฉลากส่วน ฯลฯ ซึ่งให้วิธีการจัดการ/แปลงรหัสได้อย่างง่ายดายก่อนที่จะทำให้เป็นแบบต่อเนื่องเป็นไบนารี API ได้รับแรงบันดาลใจจาก Asmjit ดังนั้นหากคุณใช้ Asmjit มาก่อนหน้านี้ควรรู้สึกคุ้นเคยมาก
โครงการของฉันบางโครงการใช้ Zydis และ Asmjit ซึ่งคำแนะนำที่ถูกถอดรหัสครั้งแรกด้วย Zydis แล้วนำไปใช้กับผู้สร้างของ Asmjit เพื่ออนุญาตให้ประมวลผล/วิเคราะห์คำแนะนำ/สาขาก่อนที่จะเข้ารหัส/ย้ายรหัสแก้ไขอีกครั้ง Zydis เพิ่งเปิดตัววิธีการใช้โครงสร้าง/ข้อมูลเดียวกันที่มีอยู่แล้วในการเข้ารหัสคำแนะนำซึ่งนำไปสู่ Zasm ห้องสมุดนี้มีจุดมุ่งหมายที่จะเป็นแอสเซมเบลอร์/ตัวถอดรหัสที่สูงขึ้นซึ่งสามารถใช้สำหรับสิ่งต่าง ๆ เช่นตัวอย่างที่กล่าวถึงก่อนหน้านี้
ความแตกต่างที่แข็งแกร่งระหว่าง Zasm และ ASMJIT คือการมุ่งเน้นไปที่ข้อมูลการเรียนการสอนที่ถูกต้องเช่นการเข้าถึงตัวถูกดำเนินการการใช้งานการลงทะเบียนที่ซ่อนอยู่แก้ไขธง CPU ทั้งหมดซึ่งทั้งหมดอาจหายไปหรือผิดใน ASMJIT โดยมีข้อยกเว้นบางอย่างแน่นอน Asmjit ตั้งเป้าหมายที่จะสร้างรหัสที่เป็นมิตร Zasm ไม่ได้พยายามแทนที่ Asmjit แต่อย่างใดมันมีเป้าหมายที่แตกต่างกัน
เหตุผลที่สองสำหรับ Zasm คือ zydis encoder อยู่ในระดับต่ำมากซึ่งหมายความว่าคุณไม่มีสิ่งต่าง ๆ เช่นฉลาก Zasm ให้ระดับระดับสูงสำหรับคำแนะนำในการประกอบและให้ฉลากเช่นแอสเซมเบลอร์ธรรมดา
Zasm ใช้ CMAKE ร่วมกับ CMKR เพื่อลดความซับซ้อนของการบำรุงรักษา cmakelists.txt การสร้างควรเป็นเรื่องง่ายเหมือนการใช้คำสั่งต่อไปนี้จากเทอร์มินัลในไดเรกทอรีราก:
cmake . -B build
cmake --build build --config Release
หากคุณต้องการสร้างการทดสอบด้วย
cmake . -B build -DZASM_BUILD_TESTS=ON
โปรแกรมเป็นคอนเทนเนอร์ที่เก็บข้อมูลทั้งหมดและยังทำหน้าที่เป็นรายการที่เชื่อมโยงเป็นสองเท่า คำแนะนำป้ายกำกับข้อมูลส่วน ฯลฯ จะถูกเก็บไว้เป็นโหนดซึ่งช่วยให้ผู้ใช้สามารถลบ/แทรก/สั่งซื้อใหม่ได้อย่างง่ายดาย
คลาสแอสเซมเบลอร์ให้ฟังก์ชั่นสมาชิกที่สร้างขึ้นเพื่อสร้างคำแนะนำ/ข้อมูล/ฉลากลงในโปรแกรมที่ตำแหน่งเคอร์เซอร์ที่ระบุ เพื่อปล่อย mov rax, -1 เทียบเท่าจะเป็น asssembler.mov(operands::rax, operands::Imm(-1));
Serializer Class ทำให้โหนดโปรแกรมเป็นไบนารีและเก็บสถานะผลลัพธ์ หลังจากการทำให้เป็นอนุกรมที่ประสบความสำเร็จผู้ใช้สามารถสืบค้นรหัสไบนารีและข้อมูลเช่นที่อยู่ของป้ายกำกับข้อมูลการย้ายข้อมูลส่วนข้อมูลส่วน ฯลฯ
ถอดรหัสข้อมูลไบนารีลงในวัตถุคำสั่งซึ่งสามารถใช้โดยตรงหรือเก็บไว้ในโปรแกรม
โครงการให้ตัวอย่างพื้นฐานบางประการที่สามารถพบได้ที่นี่ นอกจากนี้ยังมีการทดสอบที่หลากหลายสำหรับเกือบทุกอย่างที่ Zasm มีให้หากมีการชำระเงินที่ขาดหายไปการทดสอบก่อนพวกเขายังให้ตัวอย่างที่ดี หากคุณยังมีคำถามคุณสามารถติดต่อเราผ่าน Discord