【发布时间】:2010-07-27 09:45:17
【问题描述】:
我想分配一个具有执行权限的内存。
所以我使用 mprotect 来更改权限。为了获得页面对齐的内存,我使用了valloc 函数。
void * temp = (void *) valloc(x);
然后
if( mprotect(temp, BLOCK_SIZE, (PROT_READ | PROT_WRITE |PROT_EXEC))) {
exit(-1);
}
现在我想向这个分配的块添加更多内存。因此我使用了realloc 函数。
void * new_temp = (void *) realloc(temp, 1024);
这是否会自动将已分配内存的权限更改为我之前设置的权限?如果realloc将整个块移动到不同的位置,之前分配的内存和新分配的内存的权限是什么?
应该再次使用mprotect 来获取执行权限内存。并且在页面大小边界上是否有realloc 的 API,例如 valloc。 ?
【问题讨论】:
-
你应该用适当的操作系统标记它,因为这更像是一个操作系统而不是语言问题。
-
valloc() 是在 SUSv3 中删除的遗留 BSD 函数。假设一些 POSIX 操作系统,如 Linux 或 BSD。
-
@David:不是真的,Windoze 和 Linux 都支持这个东西(其他操作系统不存在),API 只是在 POSIX 没有标准化的地方有所不同。