天天看點

Windows capstone反彙編引擎使用

Windows下和Linux 一樣先解壓檔案;

VS版本:VS2017

0x01:可以看看到解壓後的檔案夾有msvc檔案夾,這個就是windows下的工程檔案,進入并打開capstone.sln項目檔案;

Windows capstone反彙編引擎使用
Windows capstone反彙編引擎使用

因為初始的capstone的工程是在vs2010上進行開發的,是以要進行重定向項目,選擇好自己所安裝的windows sdk所對應的版本;

Windows capstone反彙編引擎使用
Windows capstone反彙編引擎使用

需要注意的是我們不能單獨将msvc檔案夾單獨的拷貝出來!!!

Windows capstone反彙編引擎使用

我這裡是在cstool上進行的二次開發,為了減少編譯時間,是以我隻需要編譯dll static 和cstool就可以了,然後編譯;

Windows capstone反彙編引擎使用

找到cstool.exe之後進行功能測試,反彙編成功并将彙編代碼寫入自定義檔案;

Windows capstone反彙編引擎使用
Windows capstone反彙編引擎使用

對cstool進行二次開發時可以考慮windows和linux 的相容性,這裡隻需要将cstool.exe提供出去就可以辣;

檔案大小:

Windows capstone反彙編引擎使用

intel-xed和capstone比較對同一檔案反彙編代碼:

Windows capstone反彙編引擎使用

将記憶體資料讀入相應寄存器;

Windows capstone反彙編引擎使用

jz:jump if zero 為0則跳轉,也就是說等于0就執行跳轉指令;

je:jump if equal 等于則跳轉,也就說左右兩邊相等就執行跳轉指令;

在這裡起到的作用是一緻的,兩種引擎對opencode的解碼方式不一緻而已;

Windows capstone反彙編引擎使用

特别之處,movq和movabs的差別:

1)如果源操作數是立即數的話沒有差別,檢視反彙編可以看出movq被替換成movabs;

2)movabs的源操作數隻能是立即數或标号(本質還是立即數),目的操作數是寄存器;【修改,movabs也可對記憶體進行指派操作,源操作數也可以是寄存器】

3)64位編譯模式下,源操作數如果是标号,某些情況下隻能用movabs進行64位立即數的指派而無法使用movq

Windows capstone反彙編引擎使用
Windows capstone反彙編引擎使用

jnbe:jump if not below or equal 無符号不小于等于則跳轉;

ja:jumpp if above 無符号大于則跳轉;

結論:是以可以發現其實xed和capstone解析的反彙編代碼其實是一緻的,沒有差別;

繼續閱讀