ZASM提供了一個非常靈活且輕巧的庫,可以使用Zydis作為後端來操縱和生成X86-64代碼。 ZASM將所有內容存儲為節點,例如指令,數據,標籤,部分等,它提供了一種在將代碼序列化為二進制之前輕鬆操縱/轉換代碼的方法。 API的靈感來自ASMJIT,因此,如果您在此之前使用過ASMJIT,則會感到非常熟悉。
我的一些項目正在使用Zydis和Asmjit,其中首次使用Zydis解碼的指令,然後放入Asmjit的構建器中,允許對指令/分支進行處理/分析,然後再重新編碼/重新編碼/重新安裝修改後的代碼,有幾個偏低的方法可以進一步解釋。 Zydis最近引入了一種使用已經必須編碼導致ZASM的指令的相同結構/數據的方法。該庫的目標是成為更高級別的彙編器/解碼器,可用於以前提到的示例等各種內容。
ZASM和ASMJIT之間的強烈差異是關注準確的指令數據,例如操作數訪問,隱藏的寄存器使用,正確的CPU標誌,所有這些標誌在ASMJIT中可能缺少或錯誤,但某些例外,ASMJIT的目標是一種友好的方式,可以在Flys上生成代碼,以便讓我們說腳本計算或高性能計算。 ZASM並不試圖以任何方式替換ASMJIT,它具有不同的目標。
ZASM的第二個原因是Zydis編碼器的水平極低,這意味著您沒有標籤之類的東西,ZASM為組裝說明提供了高級類,並提供像普通彙編器一樣的標籤。
Zasm與CMKR結合使用CMAKE來簡化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));
序列化器類將程序節點序列化為二進制,並存儲所得狀態。成功序列化後,用戶可以查詢所得的二進制代碼和數據,例如標籤,搬遷信息,部分數據等。
將二進制數據解碼到可以直接使用或存儲在程序中的指令對像中。
該項目提供了一些基本示例,可以在此處找到。 ZASM提供的幾乎所有內容也都有各種測試,如果首先缺少一些檢查,它們也提供了很好的例子。如果您仍然有疑問,可以通過Discord與我們聯繫。