记一次 capstone BUG 处理

最近在使用 angr 搞一些东西,在 angr 所依赖的 capstone 5.x 版本(图中使用的是截止本文发表时 capstone 的 5.x 版本的最新版 5.0.6) 中发现了一个 capstone 的问题。

问题如下图所示

image.png

image.png

显然,这条指令读取的是 W27 和 W8,写的是 NZCV (标志寄存器),但是 regs_access 的返回是读了 W8 写了 W27 和 NZCV。

Registers read: w8
Registers modified: nzcv w27

查找相关 issues 发现了一个 2020 的 issues

https://github.com/capstone-engine/capstone/issues/1653

并且在 2021 已经合并了

https://github.com/capstone-engine/capstone/pull/1655

就在我摸不到头脑的时候,突然注意到

image.png

next 是 6.x 的分支,也就是说这个bug确实修了但是 5.x 没修。

看了一下 commit ,改动也很简单。

image.png

printOperand 函数里对着改一下即可,然后编译一个动态链接库替换进去。

cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
cmake --build build
cp libcapstone.dylib /Users/gaoyucan/.pyenv/versions/3.10.15/lib/python3.10/site-packages/capstone/lib/

image.png