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; }
预览效果如下:
文章作者:lyshark (王瑞)
文章出处:https://www.cnblogs.com/LyShark/p/16667985.html
版权声明:本博客文章与代码均为学习时整理的笔记,文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!
转载文章,请遵守《中华人民共和国著作权法》相关规定或遵守《署名CC BY-ND 4.0国际》禁止演绎规范,合理合规,携带原创出处转载。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)