我想分配一块具有执行权限的内存。
所以我使用 mprotect 来更改权限。为了获得页面对齐的内存,我使用valloc
功能。
void * temp = (void *) valloc(x);
and then
if( mprotect(temp, BLOCK_SIZE, (PROT_READ | PROT_WRITE |PROT_EXEC))) {
exit(-1);
}
现在我想向这个分配的块添加更多内存。因此我使用realloc
功能。
void * new_temp = (void *) realloc(temp, 1024);
这会自动将分配的内存的权限更改为我之前设置的权限吗?以防万一realloc
将整个块移动到不同的位置,之前分配的内存和新分配的内存的权限是什么?
Should mprotect
再次使用获得执行权限的内存。是否有 API 可以realloc
在页面大小边界上,例如valloc
. ?
尝试用另一个区域分配一个新区域valloc
,并复制旧内容。更好的是,停止使用已弃用的valloc
,并将其替换为posix_memalign
打电话,或者直接mmap
对于非常大的分配。使用mremap
你可以有效地realloc
页对齐的内存区域。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)