ZASM menyediakan perpustakaan yang sangat fleksibel dan ringan untuk memanipulasi dan menghasilkan kode x86-64 menggunakan zydis sebagai backend. ZASM menyimpan semuanya sebagai node seperti instruksi, data, label, bagian, dll. Yang menyediakan cara untuk dengan mudah memanipulasi/mengubah kode sebelum membuat serial menjadi biner. API terinspirasi oleh ASMJIT jadi jika Anda telah menggunakan ASMJIT sebelum ini terasa sangat akrab.
Beberapa proyek saya menggunakan zydis dan asmjit di mana instruksi di mana pertama kali didekodekan dengan zydis dan kemudian dimasukkan ke dalam pembangun Asmjit untuk memungkinkan pemrosesan/analisis instruksi/cabang sebelum mengode ulang/memindahkan kode yang dimodifikasi, ada beberapa kelemahan ke pendekatan ini yang akan dijelaskan lebih lanjut ke bawah. Zydis baru -baru ini memperkenalkan cara untuk menggunakan struktur/data yang sama yang sudah dimilikinya untuk menyandikan instruksi yang mengarah ke ZASM. Perpustakaan ini bertujuan untuk menjadi assembler/decoder tingkat yang lebih tinggi yang dapat digunakan untuk berbagai hal seperti contoh yang disebutkan sebelumnya.
Perbedaan yang kuat antara ZASM dan ASMJIT adalah fokus pada data instruksi yang akurat seperti akses operan, penggunaan register tersembunyi, bendera CPU yang semuanya dapat dilakukan baik hilang atau salah di ASMJIT dengan beberapa pengecualian tentu saja, ASMJIT bertujuan untuk cara yang ramah untuk menghasilkan kode dengan cepat untuk mengatakan cripting atau komputasi berkinerja tinggi. ZASM tidak mencoba menggantikan ASMJIT dengan cara apa pun, ia memiliki tujuan yang berbeda.
Alasan kedua untuk ZASM adalah bahwa Zydis Encoder menjadi level yang sangat rendah yang berarti Anda tidak memiliki hal -hal seperti label, ZASM menyediakan kelas tingkat tinggi untuk perakitan instruksi dan menyediakan label seperti assembler biasa.
ZASM menggunakan CMake dalam kombinasi dengan CMKR untuk menyederhanakan pemeliharaan cmakelists.txt. Bangunan harus semudah menggunakan perintah berikut dari terminal di direktori root:
cmake . -B build
cmake --build build --config Release
Jika Anda juga ingin membangun tes digunakan
cmake . -B build -DZASM_BUILD_TESTS=ON
Program adalah wadah yang menyimpan semua data dan juga berfungsi sebagai daftar yang terhubung ganda. Instruksi, label, data, bagian, dll. Disimpan sebagai node yang memungkinkan pengguna untuk menghapus/memasukkan/memesan ulang dengan mudah.
Kelas Assembler menyediakan fungsi anggota yang dihasilkan untuk menghasilkan instruksi/data/label ke dalam program pada posisi kursor yang ditentukan. Untuk memancarkan mov rax, -1 yang setara adalah asssembler.mov(operands::rax, operands::Imm(-1));
Kelas Serializer serial node program menjadi biner dan menyimpan keadaan yang dihasilkan. Setelah serialisasi yang berhasil, pengguna dapat menanyakan kode biner yang dihasilkan dan data seperti alamat label, info relokasi, data bagian, dll.
Decodes Data biner ke objek instruksi yang dapat digunakan secara langsung atau disimpan dalam program.
Proyek ini memberikan beberapa contoh dasar yang dapat ditemukan di sini. Ada juga berbagai tes untuk hampir semua yang disediakan ZASM, jika ada sesuatu yang hilang checkout tes terlebih dahulu, mereka juga memberikan contoh yang baik. Jika Anda masih memiliki pertanyaan, Anda dapat menghubungi kami melalui Discord.