Capstone 是一個輕量級的多平臺、多架構的反匯編框架,Capstone 旨在成為安全社區中二進制分析和反匯編的終極反匯編引擎,Capstone的編譯非常簡單只需要一步即可輕松得到對應的Lib庫檔案,如下將介紹該引擎如何被編譯,以及簡單的測驗編譯,
- Capstone 原始碼下載地址:https://github.com/capstone-engine/capstone
下載好以后直接打開專案,切換到msvc目錄下,該目錄下就是引擎的編譯入口,我們直接打開capstone.slh檔案,設定平臺工具集為編譯器的版本,

在右側選擇capstone_static也就是編譯為靜態庫,然后直接編譯檔案,

編譯成功后直接將其中的capstone.lib庫檔案拿出來,64位也是如此操作,

編譯成功后會得到兩個檔案,直接新建lib目錄,將其放進去,

然后再將專案中的include檔案一并拷貝到新建的目錄下,至此庫就編譯好了,

當需要在專案中使用該庫時,只需要簡單的引入到專案中,

接著新建一個專案,寫入如下一段測驗代碼,編譯執行即可實作對特定字串的反匯編操作,
#include <stdio.h>
#include <inttypes.h>
#include <capstone/capstone.h>
#pragma comment(lib,"capstone32.lib")
int main(int argc, char *argv[])
{
char *buffer = "\x55\x8b\xec\x81\xec\x24\x03\x00\x00\x6a\x17\x90\x90\x90";
csh handle;
cs_insn *insn;
size_t count;
int size = 14;
printf("By: LyShark \n\n");
// 打開句柄
if (cs_open(CS_ARCH_X86, CS_MODE_32, &handle) != CS_ERR_OK)
{
return 0;
}
// 反匯編代碼,地址從0x1000開始,回傳總條數
// https://www.cnblogs.com/lyshark
count = cs_disasm(handle, (unsigned char *)buffer, size, 0x1000, 0, &insn);
if (count > 0)
{
size_t index;
for (index = 0; index < count; index++)
{
for (int x = 0; x < insn[index].size; x++)
{
printf("機器碼: %d -> %02X \n", x, insn[index].bytes[x]);
}
printf("地址: 0x%"PRIx64" | 長度: %d 反匯編: %s %s \n", insn[index].address, insn[index].size, insn[index].mnemonic, insn[index].op_str);
}
cs_free(insn, count);
}
else
{
printf("反匯編回傳長度為空 \n");
}
cs_close(&handle);
getchar();
return 0;
}
預覽效果如下:

文章出處:https://www.cnblogs.com/LyShark/p/16667985.html
著作權宣告:本博客文章與代碼均為學習時整理的筆記,文章 [均為原創] 作品,轉載請 [添加出處] ,您添加出處是我創作的動力!
轉載文章,請遵守《中華人民共和國著作權法》相關規定或遵守《署名CC BY-ND 4.0國際》禁止演繹規范,合理合規,攜帶原創出處轉載,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505582.html
標籤:其他
