日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

解析C/C++?Capstone?引擎源碼編譯問題_C 語言

作者:lyshark ? 更新時間: 2022-11-02 編程語言

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

欄目分類
最近更新