gpt4 book ai didi

c++ - 如何分配具有执行权限的内存?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:06 25 4
gpt4 key购买 nike

我想分配一个具有执行权限的内存。所以我使用 mprotect 来更改权限。为了获得页面对齐的内存,我使用了 valloc 函数。

void * temp = (void *) valloc(x);

然后

if( mprotect(temp, BLOCK_SIZE, (PROT_READ | PROT_WRITE |PROT_EXEC))) {
exit(-1);
}

现在我想为这个分配的 block 添加更多内存。因此我使用了 realloc 函数。

void * new_temp = (void *) realloc(temp, 1024);

这个重新分配会自动将分配内存的权限更改为我之前设置的权限吗?如果 realloc 将整个 block 移动到不同的位置,那么之前分配的内存和新分配的内存的权限是什么?

是否应该再次使用mprotect来获取执行权限内存。是否有一个 API 可以像 valloc 那样在页面大小边界上 realloc。 ?

最佳答案

尝试用另一个 valloc 分配一个新区域,并复制旧内容。更好的是,停止使用已弃用的 valloc,并将其替换为 posix_memalign 调用,或直接使用 mmap 进行非常大的分配。使用 mremap,您可以有效地realloc 页面对齐内存区域。

关于c++ - 如何分配具有执行权限的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3342351/

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