keystone

keystone官网

Keystone

官方使用教程

Programming with C & Python

keystone

keystone为一款汇编引擎,可以将汇编指令翻译为字节码

在python下的示例使用方法如下(以arm64汇编为例)

from keystone import *

code =
"""
mov x1,1;
mov x2,2;
sub x3,x2,x1;
"""

KS = Ks(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN)
code,count=KS.asm(code)

print(code)

# 执行输出如下
# [1, 16, 160, 227, 2, 32, 160, 227, 1, 48, 66, 224]

上述代码中code为汇编代码,其有两中代码分隔方式,即;/n

Ks(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN) 一行用于初始化Keystone类,其有两个参数:硬件架构和硬件模式

如果需要使用不同语法的指令集,需要按照如下方式进行指定(以AT&T语法的x86指令集为例)

ks = Ks(KS_ARCH_X86, KS_MODE_32)
ks.syntax = KS_OPT_SYNTAX_ATT

code,count=KS.asm(code) 一句的含义为调用Ks类的asm方法来将给定的汇编代码解析为字节码,其参数为汇编指令。

其函数原型为asm(string, addr=0, as_bytes=False)

string:需要解析的指令

addr:第一条指令的地址(某些架构下可以忽略),默认为0

as_bytes:是否返回bytes串,默认返回list

该函数有两个返回值,第一个为解析的结果(根据参数不同返回为list或bytes串),第二个为语句数量(未找到详细的官方说明)


其支持的架构如下

KS_ARCH_ARM = 1 # ARM 架构 (包括 Thumb, Thumb-2)
KS_ARCH_ARM64 = 2 # ARM-64, 也称 AArch64
KS_ARCH_MIPS = 3 # Mips 架构
KS_ARCH_X86 = 4 # X86 架构 (包括 x86 & x86-64)
KS_ARCH_PPC = 5 # PowerPC 架构
KS_ARCH_SPARC = 6 # Sparc 架构
KS_ARCH_SYSTEMZ = 7 # SystemZ 架构
KS_ARCH_HEXAGON = 8
KS_ARCH_EVM = 9
KS_ARCH_MAX = 10

其支持的模式如下

KS_MODE_LITTLE_ENDIAN = 0,    # 小端序模式
KS_MODE_BIG_ENDIAN = 1 << 30, # 大端序模式

# arm / arm64
KS_MODE_ARM = 0,              # ARM 模式
KS_MODE_THUMB = 1 << 4,       # THUMB 模式 (包括 Thumb-2)
KS_MODE_MCLASS = 1 << 5,      # ARM's Cortex-M 系列
KS_MODE_V8 = 1 << 6,          # ARMv8 A32 encodings for ARM

# arm (32bit) cpu 类型
KS_MODE_ARM926 = 1 << 7,      # ARM926 CPU 类型
KS_MODE_ARM946 = 1 << 8,      # ARM946 CPU 类型
KS_MODE_ARM1176 = 1 << 9,     # ARM1176 CPU 类型

# mips
KS_MODE_MICRO = 1 << 4,       # MicroMips 模式
KS_MODE_MIPS3 = 1 << 5,       # Mips III ISA
KS_MODE_MIPS32R6 = 1 << 6,    # Mips32r6 ISA
KS_MODE_MIPS32 = 1 << 2,      # Mips32 ISA
KS_MODE_MIPS64 = 1 << 3,      # Mips64 ISA

# x86 / x64
KS_MODE_16 = 1 << 1,          # 16-bit 模式
KS_MODE_32 = 1 << 2,          # 32-bit 模式
KS_MODE_64 = 1 << 3,          # 64-bit 模式

# ppc
KS_MODE_PPC32 = 1 << 2,       # 32-bit 模式
KS_MODE_PPC64 = 1 << 3,       # 64-bit 模式
KS_MODE_QPX = 1 << 4,         # Quad Processing eXtensions 模式

# sparc
KS_MODE_SPARC32 = 1 << 2,     # 32-bit
KS_MODE_SPARC64 = 1 << 3,     # 64-bit
KS_MODE_V9 = 1 << 4,          # SparcV9 模式

常见的架构与模式组合如下

# X86
Ks(KS_ARCH_X86, KS_MODE_16)
Ks(KS_ARCH_X86, KS_MODE_32)
Ks(KS_ARCH_X86, KS_MODE_64)

# RADIX16 syntax Intel (default syntax)
Ks(KS_ARCH_X86, KS_MODE_32).syntax=KS_OPT_SYNTAX_RADIX16

# ARM
Ks(KS_ARCH_ARM, KS_MODE_ARM)
Ks(KS_ARCH_ARM, KS_MODE_ARM + KS_MODE_BIG_ENDIAN)
Ks(KS_ARCH_ARM, KS_MODE_THUMB)
Ks(KS_ARCH_ARM, KS_MODE_THUMB + KS_MODE_BIG_ENDIAN)

# ARM64
Ks(KS_ARCH_ARM64, KS_MODE_LITTLE_ENDIAN)

# Hexagon
Ks(KS_ARCH_HEXAGON, KS_MODE_BIG_ENDIAN)

# Mips
Ks(KS_ARCH_MIPS, KS_MODE_MIPS32)
Ks(KS_ARCH_MIPS, KS_MODE_MIPS32 + KS_MODE_BIG_ENDIAN)
Ks(KS_ARCH_MIPS, KS_MODE_MIPS64)
Ks(KS_ARCH_MIPS, KS_MODE_MIPS64 + KS_MODE_BIG_ENDIAN)

# PowerPC
Ks(KS_ARCH_PPC, KS_MODE_PPC32 + KS_MODE_BIG_ENDIAN)
Ks(KS_ARCH_PPC, KS_MODE_PPC64)
Ks(KS_ARCH_PPC, KS_MODE_PPC64 + KS_MODE_BIG_ENDIAN)

# Sparc
Ks(KS_ARCH_SPARC, KS_MODE_SPARC32 + KS_MODE_LITTLE_ENDIAN)
Ks(KS_ARCH_SPARC, KS_MODE_SPARC32 + KS_MODE_BIG_ENDIAN)

# SystemZ
Ks(KS_ARCH_SYSTEMZ, KS_MODE_BIG_ENDIAN)

其支持的所有语法如下

KS_OPT_SYNTAX_INTEL = 1<<0
KS_OPT_SYNTAX_ATT = 1<<1        #AT&T
KS_OPT_SYNTAX_NASM = 1<<2
KS_OPT_SYNTAX_MASM = 1<<3
KS_OPT_SYNTAX_GAS = 1<<4
KS_OPT_SYNTAX_RADIX16 = 1<<5    #Radix16
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇