首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MProtect Errno 12解释(ENOMEM)

MProtect Errno 12解释(ENOMEM)
EN

Stack Overflow用户
提问于 2011-03-22 18:40:09
回答 2查看 1.8K关注 0票数 2

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

代码语言:javascript
复制
Mprotect failed at 0x863a000 (length 8192) with errno 12

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

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

同样值得注意的是,当在instruments下运行应用程序时,instruments报告设备有足够的可用内存(~40mb)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-22 18:55:37

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

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

但是mprotect(2)不是魔术;它不能防止return to libc攻击,或者不恰当地使用system(3)或其他代码解释器等。

iPhone上errno value 12的C符号是什么?Monotouch在哪里使用mprotect(2)本身,为什么使用它?您的软件是否有可能使用mprotect(2)

票数 1
EN

Stack Overflow用户

发布于 2011-03-24 09:45:43

你的应用使用泛型吗?

注意在泛型的类型上使用虚方法,对于Monotouch来说,它必须在预编译的时候做很多的hack,还有一些关于trampolines的魔法,根据我的经验,YMMV可能会导致一些方法劫持,或者内存崩溃。

为了安全起见,将泛型类上的所有方法都设为非虚的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5389947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档