gpt4 book ai didi

iphone - MProtect Errno 12 (ENOMEM) 的说明

转载 作者:行者123 更新时间:2023-12-03 21:07:51 25 4
gpt4 key购买 nike

我正在使用 Monotouch 编写一个 iPhone 应用程序,最近该应用程序开始崩溃,并指出

Mprotect failed at 0x863a000 (length 8192) with errno 12

随后是相当长的堆栈跟踪和 Springboard 通知“应用程序因信号 6 异常退出”。

I've read this question它表明该应用程序已耗尽 iPhone 上的所有可用内存。我们已在应用程序中应用了一些通用的处置模式,并且通常会尽快处置任何重物。这意味着应用程序现在运行时使用的内存更少。但是我们仍然收到 MProtect 失败消息。

还值得注意的是,当在仪器下运行应用程序时,仪器会报告设备有足够的可用内存(约 40mb)。

我想知道是否有人能够解释 MProtect 和这次失败,因为我认为我还没有完全理解它。

最佳答案

mprotect(2)要求操作系统内核更改某些地址空间部分的保护模式。

mprotect(2) 通常用于使地址空间的数据部分不可执行,因此 buffer overflows , format string vulnerabilities , use after freefreeing unallocated memory错误或类似的攻击无法返回到攻击者提供的数据中。此外,mprotect(2) 用于确保程序text 空间不会被这些相同的漏洞修改。 (如果攻击者可以简单地覆盖您提供的函数,那就不好了。)

但是mprotect(2) 并不神奇;它是一种魔法。它无法防止return to libc攻击,或不当使用 system(3) 或其他代码解释器等。

iPhone 上 errno12 的 C 符号是什么? Monotouch 在何处以及为何使用 mprotect(2) 本身?您的软件有可能使用 mprotect(2) 吗?

关于iphone - MProtect Errno 12 (ENOMEM) 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5389947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com