首页
社区
课程
招聘
[原创] Arm静态分析引擎原理二 - 反汇编引擎实现
发表于: 2026-8-4 19:06 758

[原创] Arm静态分析引擎原理二 - 反汇编引擎实现

2026-8-4 19:06
758

上文

经过 DSL 描述以后,引擎不会直接解析 DSL,而是会预先生成一张静态查找表。查找表中的每一个节点都会转换成 (mask, value) 的形式,运行时只需要进行按位与和比较即可完成匹配,因此解码过程不需要解释 DSL,也不需要字符串匹配。

还是以这个C4.1.92 Data Processing – Immediate里面的add为例,在解码的时候会为这棵树生成maskvalue

指令查表的逻辑就是 :


C4.1.92 Data Processing – Immediate:xxx100xxxxxxxxxxxxxxxxxxxxxxxxxx的mask和value分别是:

    mask: 469762048,二进制:00011100000000000000000000000000

    value: 268435456,  二进制:00010000000000000000000000000000


C4.1.92.3 Add/subtract (immediate): xxx100010xxxxxxxxxxxxxxxxxxxxxxx的mask和value分别是:

    mask:528482304,二进制:00011111100000000000000000000000

    value:285212672,二进制:00010001000000000000000000000000


ADD <Wd|WSP>, <Wn|WSP>, #<imm>{, <shift>} 指令的mask和value分别是:

    mask:4286578688,二进制:11111111100000000000000000000000

    value:285212672,二进制:00010001000000000000000000000000

拿一条add指令举例:

那么伪代码的逻辑就是这样的:


以add指令的操作数为例:

第一个操作数是从0开始,5位

第二个操作数是从5开始,5位

第三个操作数是从10开始,12位,这个操作数有shift,shift的逻辑就是f:f1

这里的f:f1表示一个函数,也就是父节点上的fshift,fshift里面就是一个字符串描述的函数,直接可以求出shift的值即可


这里还是以

为例

指令的二进制是:0001000100000000001100 01000 01000

第一个操作数0:5 -> 01000 -> 8 -> 寄存器是16位w -> w8


传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

最后于 2026-8-5 15:29 被neocanable编辑 ,原因: 改个名字
收藏
免费 35
打赏
分享
最新回复 (15)
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
666
2026-8-4 19:13
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2026-8-5 06:29
0
雪    币: 1560
活跃值: (5648)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
1
2026-8-5 09:45
0
雪    币: 176
活跃值: (1247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
1
2026-8-5 19:27
0
雪    币: 57
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
666
2026-8-5 19:51
0
雪    币: 57
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
666
2026-8-5 19:56
0
雪    币: 95
活跃值: (3482)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
6666666
2026-8-5 22:29
0
雪    币: 269
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2026-8-12 11:14
0
雪    币: 3587
活跃值: (7305)
能力值: ( LV11,RANK:185 )
在线值:
发帖
回帖
粉丝
10
1
2026-8-13 10:39
0
雪    币: 2
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
666
2026-8-13 10:42
0
雪    币: 5098
活跃值: (6425)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
6
2026-8-13 10:58
0
雪    币: 573
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
牛牛牛
2026-8-18 09:15
0
雪    币: 2790
活跃值: (6820)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
感谢分享!
2026-8-18 10:09
0
雪    币: 200
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
牛x
2026-8-20 13:59
0
雪    币: 207
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
学习。
6天前
0
游客
登录 | 注册 方可回帖
返回