網(wǎng)站首頁 編程語言 正文
Capstone 是一個輕量級的多平臺、多架構(gòu)的反匯編框架。Capstone 旨在成為安全社區(qū)中二進制分析和反匯編的終極反匯編引擎。Capstone的編譯非常簡單只需要一步即可輕松得到對應的Lib庫文件,如下將介紹該引擎如何被編譯,以及簡單的測試編譯。
Capstone 源碼下載地址:https://github.com/capstone-engine/capstone
下載好以后直接打開項目,切換到msvc
目錄下,該目錄下就是引擎的編譯入口,我們直接打開capstone.slh
文件,設置平臺工具集為編譯器的版本。
在右側(cè)選擇capstone_static
也就是編譯為靜態(tài)庫,然后直接編譯文件。
編譯成功后直接將其中的capstone.lib
庫文件拿出來,64位也是如此操作。
編譯成功后會得到兩個文件,直接新建lib目錄,將其放進去。
然后再將項目中的include
文件一并拷貝到新建的目錄下。至此庫就編譯好了。
當需要在項目中使用該庫時,只需要簡單的引入到項目中。
接著新建一個項目,寫入如下一段測試代碼,編譯執(zhí)行即可實現(xiàn)對特定字符串的反匯編操作。
#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開始,返回總條數(shù) // 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; }
預覽效果如下:
文章作者:lyshark (王瑞)
文章出處:https://www.cnblogs.com/LyShark/p/16667985.html
版權(quán)聲明:本博客文章與代碼均為學習時整理的筆記,文章 [均為原創(chuàng)] 作品,轉(zhuǎn)載請 [添加出處] ,您添加出處是我創(chuàng)作的動力!
轉(zhuǎn)載文章,請遵守《中華人民共和國著作權(quán)法》相關規(guī)定或遵守《署名CC BY-ND 4.0國際》禁止演繹規(guī)范,合理合規(guī),攜帶原創(chuàng)出處轉(zhuǎn)載。
原文鏈接:https://www.cnblogs.com/LyShark/p/16667985.html
相關推薦
- 2024-02-28 UNI-APP中,swiper和tabbar結(jié)合實現(xiàn)滑動翻頁效果
- 2023-05-23 Golang拾遺之指針和接口的使用詳解_Golang
- 2022-04-11 Entity?Framework?Core工具使用命令行_基礎應用
- 2022-09-18 iOS開發(fā)retina屏幕下的點與像素關系詳解_IOS
- 2023-07-14 css 實現(xiàn)塊標簽上下左右居中
- 2022-06-22 C語言樹與二叉樹基礎全刨析_C 語言
- 2022-11-19 C#字符串與正則表達式的圖文詳解_C#教程
- 2022-05-25 Postman動態(tài)獲取值(動態(tài)設置全局變量)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支