1、基本案例——disasm函数
capstone有非常简单的API,所以使用该框架编写工具非常简单。接下来,下面的代码实现的功能是反汇编一些X86二进制文件,并打印出其对应的汇编语句。
代码展示:
from capstone import * #将capstone模块中函数全部导入
code=b"\x55\x48\x8b\x13\x00\x00" #设置需要进行反汇编的十六进制机器码
#创建Cs类对象md,我们需要给这个类传两个参数:硬件架构,硬件模式(位长)
md=Cs(CS_ARCH_X86,CS_MODE_64) #表示此时md对象对采用x86架构64位,对机器码进行汇编
for i in md.disasm(code,0x1000): #循环遍历disasm函数返回的列表
print("0x%x:\t %s\t%s" %(i.address,i.mnemonic,i.op_str))
代码解释:(此时的行数是不计注释和空行)
代码的前两行的作用分别是导入模块中需要使用的函数(或类)和设置需要进行反汇编的机器码。第三的作用是为Cs类创建一个类对象md,便于在后续代码中调用Cs类中定义的方法。
反汇编二进制文件(机器码)实际上使用的是Cs类中定义的成员函数disasm()。因为我们在代码的第三行已经初始了一个类对象md,所以当我们要使用disasm()这个函数的时候,直接使用类对象调用即可---md.disasm()。disasm需要传两个参数:
①第