文章目录
一、创建 Capstone 反汇编解析器实例对象
二、设置 Cs 汇编解析器显示细节
一、创建 Capstone 反汇编解析器实例对象
使用 Capstone 反汇编框架 ,
首先创建 Capstone 反汇编解析器对象 , 即 Cs 类实例对象 ;
构造函数原型如下 :
class Cs(object): def __init__(self, arch, mode):
创建 Capstone 实例对象代码 : 下面代码创建的是 x86 架构的 32 位模式的 Cs 对象 , 也就意味着反汇编的 ELF 文件是 32 位 x86 CPU 架构的动态库 ;
Cs(CS_ARCH_X86, CS_MODE_32)
第一个参数是 CPU 架构 , 第二个参数是 CPU 位数模式 ;
CPU 架构选择 : 有如下可选项 ; 99% 的情况下使用的是 CS_ARCH_ARM , CS_ARCH_ARM64 , CS_ARCH_X86 这三种情况 ; 其中 Android 逆向中 , CS_ARCH_ARM 和 CS_ARCH_ARM64 用的最多 ;
# architectures CS_ARCH_ARM = 0 CS_ARCH_ARM64 = 1 CS_ARCH_MIPS = 2 CS_ARCH_X86 = 3 CS_ARCH_PPC = 4 CS_ARCH_SPARC = 5 CS_ARCH_SYSZ = 6 CS_ARCH_XCORE = 7 CS_ARCH_M68K = 8 CS_ARCH_TMS320C64X = 9 CS_ARCH_M680X = 10 CS_ARCH_EVM = 11 CS_ARCH_MAX = 12 CS_ARCH_ALL = 0xFFFF
CPU 位数模式 : 每种 CPU 架构都分 32 位 , 64 位 模式 ;
# disasm mode CS_MODE_LITTLE_ENDIAN = 0 # little-endian mode (default mode) CS_MODE_ARM = 0 # ARM mode CS_MODE_16 = (1 << 1) # 16-bit mode (for X86) CS_MODE_32 = (1 << 2) # 32-bit mode (for X86) CS_MODE_64 = (1 << 3) # 64-bit mode (for X86, PPC) CS_MODE_THUMB = (1 << 4) # ARM's Thumb mode, including Thumb-2 CS_MODE_MCLASS = (1 << 5) # ARM's Cortex-M series CS_MODE_V8 = (1 << 6) # ARMv8 A32 encodings for ARM CS_MODE_MICRO = (1 << 4) # MicroMips mode (MIPS architecture) CS_MODE_MIPS3 = (1 << 5) # Mips III ISA CS_MODE_MIPS32R6 = (1 << 6) # Mips32r6 ISA CS_MODE_MIPS2 = (1 << 7) # Mips II ISA CS_MODE_V9 = (1 << 4) # Sparc V9 mode (for Sparc) CS_MODE_QPX = (1 << 4) # Quad Processing eXtensions mode (PPC) CS_MODE_M68K_000 = (1 << 1) # M68K 68000 mode CS_MODE_M68K_010 = (1 << 2) # M68K 68010 mode CS_MODE_M68K_020 = (1 << 3) # M68K 68020 mode CS_MODE_M68K_030 = (1 << 4) # M68K 68030 mode CS_MODE_M68K_040 = (1 << 5) # M68K 68040 mode CS_MODE_M68K_060 = (1 << 6) # M68K 68060 mode CS_MODE_BIG_ENDIAN = (1 << 31) # big-endian mode CS_MODE_MIPS32 = CS_MODE_32 # Mips32 ISA CS_MODE_MIPS64 = CS_MODE_64 # Mips64 ISA CS_MODE_M680X_6301 = (1 << 1) # M680X HD6301/3 mode CS_MODE_M680X_6309 = (1 << 2) # M680X HD6309 mode CS_MODE_M680X_6800 = (1 << 3) # M680X M6800/2 mode CS_MODE_M680X_6801 = (1 << 4) # M680X M6801/3 mode CS_MODE_M680X_6805 = (1 << 5) # M680X M6805 mode CS_MODE_M680X_6808 = (1 << 6) # M680X M68HC08 mode CS_MODE_M680X_6809 = (1 << 7) # M680X M6809 mode CS_MODE_M680X_6811 = (1 << 8) # M680X M68HC11 mode CS_MODE_M680X_CPU12 = (1 << 9) # M680X CPU12 mode CS_MODE_M680X_HCS08 = (1 << 10) # M680X HCS08 mode
二、设置 Cs 汇编解析器显示细节
创建完 Capstone 汇编解析器 Cs 对象后 ,
一定要设置汇编解析器实例对象的 detail 为 true , 作用是 表示需要显示细节 , 打开后 , 会标明每条汇编代码中对寄存器的影响 ; 如 : 本条汇编代码中 , 会读写哪些寄存器 ;
# 创建 Capstone 实例对象 x86 = Cs(CS_ARCH_X86, CS_MODE_32) # 此处设置为 true , 表示需要显示细节 , 打开后 , 会标明每条汇编代码中对寄存器的影响 # 如 : 本条汇编代码中 , 会读写哪些寄存器 x86.detail = True