Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 受保护\u-open\u-np的参数_Ios_Objective C_Assembly_Sqlite_Ida - Fatal编程技术网

Ios 受保护\u-open\u-np的参数

Ios 受保护\u-open\u-np的参数,ios,objective-c,assembly,sqlite,ida,Ios,Objective C,Assembly,Sqlite,Ida,我发现libsqlite3.dylib使用了guarded\u open\u np函数来打开数据库文件。我研究过sqlite3开放源码,但没有这样的东西。因此,苹果显然已经将其修改为使用guarded\u open\u np而不是unix的open 我知道guarded\u open\u np是一个私有API,我没有找到关于它的头文件和文档。我想在guarded\u open\u np上执行拦截(Cydia的MSFunctionHook),因此我还需要知道哪些参数,而不仅仅是函数名 我使用IDA

我发现libsqlite3.dylib使用了
guarded\u open\u np
函数来打开数据库文件。我研究过sqlite3开放源码,但没有这样的东西。因此,苹果显然已经将其修改为使用
guarded\u open\u np
而不是unix的
open

我知道
guarded\u open\u np
是一个私有API,我没有找到关于它的头文件和文档。我想在
guarded\u open\u np
上执行拦截(Cydia的MSFunctionHook),因此我还需要知道哪些参数,而不仅仅是函数名

我使用IDA Pro对libsqlite3.dylib进行了反向工程,它的名称是
guarded\u open\u 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\u open\u np
及其所有参数,我将不胜感激。

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

也就是说,以下是一些参考资料,它们可能有助于为您提供了解自己的工具:

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

在汇编中,要调用函数,通常需要遵循一种称为应用程序二进制接口(ABI)的方法,这种方法只需设置一些约定,例如函数期望参数的位置(寄存器、堆栈等),允许更改函数调用的寄存器等

由于这是iOS,您应该查看和

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

因此,为了便于调查,您可能希望在分支到受保护的\u open\u np存根之前找到这些寄存器中的内容。XCode可以为您吐出文件的程序集,您应该能够在其上设置断点;然后在llvm中使用
register read
命令显示所有寄存器内容(请注意,有些寄存器可能只包含要使用
memory read
lldb命令检查的内存位置)


为了更深入地了解iOS组装,我推荐迈克·阿什(Mike Ash)的三篇博文“分解组装”零件,以及。那么你可能会喜欢他最近在网上的帖子。这些都是非正式的资源,但确实可以帮助您快速掌握扫描程序集的方法,并大致了解在哪里发生了什么。

我的最佳猜测是,它看起来像UNIX的open(3):@Krypton您是否能够将其挂接到调试器中,并检查寄存器r0~r3的内容(如果它们指向内存,则检查内存的内容)就在blx声明之前?调用约定通常使用r0作为第一个参数,r1作为第二个参数,等等。感谢Wilson提供的资料和参考。我想消化这些东西需要相当长的时间:D@Krypton谢谢你的信任!我真的没想到。上面提到的博客文章实际上是一个相当不错的起点(ABI参考和内容非常密集,不适合学习汇编)。然而,如果你真的想知道你的东西,那么兰德尔·海德的《汇编语言的艺术》是一本强烈推荐的书。