我正在做一些关于iPhone如何管理堆和堆栈的研究,但是很难找到一个好的信息来源。我试图跟踪密码是如何保存在内存中的,即使在NSString被释放之后也是如此。
据我所知,一旦ARC中的释放计数降到0,iPhone就不会清除内存内容(写零或垃圾)。所以带密码的字符串将一直存在于内存中,直到该内存位置被重写为止。
Xcode中有一个调试选项Malloc Scribble,通过启用/禁用此选项(并禁用僵尸)来调试将用0x55填满已释放内存的内存问题,并且在模拟器的内存转储(使用gcore)之后,我可以检查内存中的内容是否已用0x55替换。
我想知道这是否可以通过苹果商店的构建来实现,用垃圾数据填充已释放的内存,如果我认为iPhone在默认情况下不会这样做是正确的或者不是正确的,或者是否有其他更好的选项来处理内存中的敏感数据,以及在使用之后应该如何清除它(可能是可变数据?写在那个记忆位置?)

最佳答案

我不认为有什么可以在构建设置级别上完成的。但是,您可以通过将内存归零来应用某种内存清理(将memset与指向字符串的指针一起使用)。

09-26 20:48
查看更多