ios – guarded_open_np的参数

前端之家收集整理的这篇文章主要介绍了ios – guarded_open_np的参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我发现libsqlite3.dylib使用guarded_open_np函数来打开数据库文件.我看了一下sqlite3开源,没有这样的事情.所以Apple肯定已将其修改为使用guarded_open_np而不是unix的open.

我知道guarded_open_np是一个私有API,我既没有找到头文件也没有关于它的文档.我想在guarded_open_np上进行拦截(Cydia的MSFunctionHook),所以我需要知道什么是参数,而不仅仅是函数名.

我使用IDA Pro对libsqlite3.dylib进行了逆向工程,这就是它所谓的guarded_open_np:

sub_79c1c:
push {r7,lr}
mov r7,sp
sub sp,#0x4
mov r3,r1
movw r1,#0xc57e
movt r1,#0x0
str r2,[sp,#0x4 + var_0]
add r1,pc
movs r2,#0xf
blx imp___picsymbolstub4__guarded_open_np
add sp,#0x4
pop {r7,pc}

但是,目前尚不清楚它可能采取什么样的准则.如果有一些官方网站提到guarded_open_np及其所有参数,我很感激.

解决方法

根据这里的信息,我不相信我们能够给出一个可靠的答案,尽管CodaFi是一个很好的建议.

也就是说,这里有一些参考资料可能有助于您找到自己找到的工具:

首先,您可能已经知道,但了解寄存器和堆栈.

在汇编中,要调用一个函数,你通常会遵循一个叫做应用程序二进制接口(ABI)的东西,它只是设置了函数期望它们的参数(寄存器,堆栈等)的约定,这些寄存器允许函数调用改变等等. .

由于这是iOS,你应该看看Procedure Call Standard for ARM ArchitectureiOS ABI Function Call Guide.

查看上面第一个链接中的“基本过程调用标准”部分,可以看出函数调用期望它们的前四个参数分别位于寄存器r0~r4中.

因此,对于您的调查,您可能希望在分支到guarded_open_np存根之前找出这些寄存器中的内容. XCode可以为你吐出文件的程序集,你应该可以在它上面设置断点;然后使用llvm中的register read命令向您显示所有寄存器内容(注意一些寄存器可能只包含您希望使用内存读取lldb命令检查的内存位置).

为了进一步深入iOS组装,我推荐Mike Ash的三部分博客文章“拆卸大会”部分1,23.然后你可能会喜欢他最近的帖子在ARM 64 bit updates.这些是非正式的资源,但确实可以帮助你通过扫描组件快速掌握,并且通常知道发生了什么.

猜你在找的iOS相关文章