关于ghidra 9.2版本以上无法反编译pac代码pacia等函数的解决方法

arm v8.3版本以上加入了point auth code这种指令比如pacia retaa,很可惜,大多数反编译器无法编译,甚至你在跑qemu的时候如果qemu的版本太低也会报错。

之前使用ghidra 9.1.2的时候能够编译成功,但是9.2以上的时候就不行了。
在这里插入图片描述
事实上我们在ghidra_9.2.1_PUBLIC/Ghidra/Processors/AARCH64/data/languages/AARCH64.pspec里面可以找到这一段代码和注释:

<context_data>
    <context_set space="ram">
<!-- These context registers are only modified by the user, e.g. with the "Set Registers..." command. -->
      <set name="ShowPAC" val="0" description="1 to show PAC operations in decompiler"/>
      <set name="PAC_clobber" val="0" description="1 to let PAC operations overwrite their operands in decompiler"/>
      <set name="ShowBTI" val="0" description="1 to show BTI effects in decompiler"/>
      <set name="ShowMemTag" val="0" description="1 to show memory tag checks in decompiler"/>
    </context_set>
  </context_data>

把里面的ShowPAC和PAC_clobber改成1重启就可以了,注释里还提到可以使用右键的set register value来设置context register也就是伪寄存器来临时修改这个flag,但是我总是报错,不知道为什么。
在这里插入图片描述
总之无论什么方法,修改了这个反编译的flag之后就能够成功实现对pacia指令对反编译。
在这里插入图片描述

在这里插入图片描述

参考:https://github.com/NationalSecurityAgency/ghidra/issues/2488

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值