You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取ARM64(ARMv8.5-A)指令操作码并创建匹配通配符?

ARM64 LDRB指令匹配通配符构建指南

1. 核心差异:ARM64 vs x86指令编码

ARM64(A64)指令是固定32位长度,操作码并非像x86那样集中在连续整字节,而是分散在多个位段中。这就是两条LDRB指令字节编码看似无关联的原因——可变字段(寄存器号、偏移量)的字节分布打乱了视觉规律,但从位段层面看,固定的操作码位是统一的。

2. 拆解LDRB的固定操作码位段

以两种最常用的LDRB格式为例(基于ARMv8架构规范):

格式1:LDRB <Wt>, [<Xn>, #<imm12>](寄存器基址+12位立即数偏移)

固定必须匹配的位段:

  • 位31-28:0b0011(十六进制0x3,加载类指令标识)
  • 位27-25:0b010(无符号字节加载的操作码子段)
  • 位20:0b0(SZ位,标识操作宽度为8位)

可变位段(需通配的部分):

  • 位19-16:基址寄存器号(Rn)
  • 位15-12:目标寄存器号(Rt)
  • 位11-0:12位立即数偏移(imm12)

格式2:LDRB <Wt>, [<SP>, #<imm12>](SP基址+12位立即数偏移)

固定必须匹配的位段:

  • 位31-28:0b1111(十六进制0xF,SP基址专属标识)
  • 位27-25:0b010
  • 位20:0b0
  • 位19-16:0b1111(固定对应SP寄存器)

可变位段:

  • 位15-12:目标寄存器号(Rt)
  • 位11-0:12位立即数偏移(imm12)

3. 转换为可使用的匹配规则

根据逆向工具的支持能力,有两种匹配方式:

方式1:位掩码匹配(精准推荐)

大部分专业逆向工具(如IDA、Ghidra)支持位掩码匹配,能精确区分固定位和可变位:

  • 寄存器基址LDRB:匹配值0x38000000,掩码0xFE100000
  • SP基址LDRB:匹配值0xF8F00000,掩码0xFFF00000

方式2:字节通配符匹配(快速初步匹配)

若工具仅支持字节级通配,可基于观察到的固定字节特征编写规则:

  • 寄存器基址LDRB(大端机器码表示):?? ?? ?? 38
  • SP基址LDRB(大端机器码表示):?? ?? ?? 39

注:这种方式可能存在少量误匹配,需结合指令上下文验证。

4. 实操验证步骤

  1. 用汇编器生成不同参数的LDRB指令,导出机器码;
  2. 用你编写的匹配规则测试,确认能命中所有目标指令;
  3. 检查是否误匹配非LDRB指令,若有则调整位掩码或通配规则。

内容的提问来源于stack exchange,提问作者IRP_HANDLER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:54:53