ARMv7字修补程序(CBNZ)

ARMv7字修补程序(CBNZ),arm,Arm,我有一个正在拆解的iPhone应用程序 我的理解是,CBNZ指令是“非零上的比较和分支”,而CBZ指令是“零上的比较和分支” 我在网上找不到任何地方可以证实这一点,但对我来说,CBNZ似乎是由B9表示的,地址是“0xB9DC”,CBZ是“0xB3DC” 地址如下: DC B9 53 48 03 99 78 44 00 68 BF F1 74 EE 51 49 我将其修改为: DC B3 53 48 03 99 78 44 00 68 BF F1 74 EE 51 49 之前,我在ARMv6中修补

我有一个正在拆解的iPhone应用程序

我的理解是,CBNZ指令是“非零上的比较和分支”,而CBZ指令是“零上的比较和分支”

我在网上找不到任何地方可以证实这一点,但对我来说,CBNZ似乎是由B9表示的,地址是“0xB9DC”,CBZ是“0xB3DC”

地址如下: DC B9 53 48 03 99 78 44 00 68 BF F1 74 EE 51 49

我将其修改为: DC B3 53 48 03 99 78 44 00 68 BF F1 74 EE 51 49

之前,我在ARMv6中修补了相同的检查,尽管它由一个BNE“0xD130”表示,我修补为一个B“0xE032”

这: 32 D1 5B 48 5C 49 78 44 79 44 00 68 09 68 AC F1

致: 32 E0 5B 48 5C 49 78 44 79 44 00 68 09 68 AC F1

这正是我所期望的,接过树枝继续我所希望的。通常,只有通过检查,它才会接受这样的分支

我认为将CBNZ补丁到CBZ会有类似的结果,尽管看起来不是这样


希望有人能帮我理解。对不起,如果这不是一个论坛,我应该张贴这样的问题,虽然它似乎是一个好地方问。如果您需要更多信息,我将很乐意提供。

要了解组件,您需要转到位级别。如果你不想花时间去理解ARM编码,那就找一个反汇编程序(例如,
otool-tV
)和一个汇编程序(例如,
as
),他们会为你计算出指令编码/解码


CBZ/CBNZ指令的编码如下

15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0   <-- bit
 1  0  1  1 op  0  i  1 [         imm5][     Rn]  <-- meaning
意味着

  • op=1
  • i=0
  • imm5=11011
  • Rn=100
意味着

而B3DC是二进制的

(1  0  1  1 op  0  i  1 [         imm5][     Rn])
 1  0  1  1  0  0  1  1 [1  1  0  1  1][1  0  0]
意味着

  • op=0
  • i=1
  • imm5=11011
  • Rn=100
意味着


请注意,您的补丁B9B3也更改了i位,从而更改了它应该跳转到的地址。您应该只更改op位,这意味着您应该将字节修补为B1

,这是在一个容易找到的地方记录的。该处理器的arm文档。转到->arm架构->参考手册。并获取armv7-m手册。你说ARM7是一个ARMv4,没有这条指令,这条指令目前只在armv7-m中受支持,这让我很反感。没有arm6,你是说armv6吗?thumb bne说明也可以在同一个armv7-m arch参考手册中找到,或者在任何之前的arch参考手册中找到,回到armv4t。实际上,armv7 ar手册中也有它。很抱歉,我指的是ARMv6和armv7。实际上我不知道有什么不同,我现在是一个noob。操作码记录在ARM(ARM架构参考手册)中。过去每件事都只有一只手臂,现在每个家庭都有一只手臂。较新的ARM(如armv7 ar ARM)将根据指令列出支持它的体系结构,例如CBNZ/CBZ仅为armv7,这就是您可能没有看到它或编译器可能没有在armv6上使用它的原因。感谢您为我详细介绍它。不幸的是,我已经尝试B1仅仅是出于猜测,它并没有像我希望的那样工作。我用的是IDA Pro,当我用B1的时候,似乎一切都是我想要的,但应用程序崩溃了。你知道为什么吗?如果你需要的话,我可以发布更多的程序集。你认为我应该改变它而不是CBZ吗?@untochable不知道你想做什么。如果你有其他问题,你应该发布一个新的。
CBNZ R4, (PC+54)   ; 54 = 0b0110110
(1  0  1  1 op  0  i  1 [         imm5][     Rn])
 1  0  1  1  0  0  1  1 [1  1  0  1  1][1  0  0]
CBZ R4, (PC+118)  ; 118 = 0b1110110