首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mprotect()权限被拒绝的RHEL 6.8错误

mprotect()权限被拒绝的RHEL 6.8错误
EN

Stack Overflow用户
提问于 2016-12-15 22:43:20
回答 1查看 1.5K关注 0票数 0

我正在运行下面的C程序,在RHEL5.11和RHEL6.8上执行它时得到了不同的结果。On 5.11,输出为:

页码为4096

内存分配时间为0x12791000

保护成功

而在6.8上,输出是:

页码为4096

内存在0xea 6000处由memalign()分配

保护失败:权限被拒绝

有人知道为什么会发生这种事吗?是否有需要设置的内核参数?

下面是C程序:

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <malloc.h>
#include <sys/mman.h>

static void domp( void *, long );

static void domp( void *pmem, long psz ) {
    if (mprotect( pmem, psz, PROT_READ | PROT_WRITE | PROT_EXEC ) == -1) {
       perror( "mprotect failed" );
    } else {
       printf( "mprotect success\n" );
    }
}

int main( int argc, char *argv[] ) {
    long lpsz;
    void *lmem;

    lpsz = sysconf(_SC_PAGESIZE);
    printf( "Page size is %ld\n", lpsz );

    if ((lmem = memalign( lpsz, lpsz )) == NULL) {
       perror( "memalign failed" );
       exit (-1);
    }
    printf( "Memory allocated by memalign() at %p\n", lmem );
    domp( lmem, lpsz );

    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-15 22:51:53

很有可能是塞利诺。

然而,真正的问题是,为什么要在没有显式mmap的东西上调用mprotect。实际上,如果您确实需要不同的权限,为什么不直接使用mmap呢?额外的问题是,为什么你认为你需要PROT_EXEC。

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

https://stackoverflow.com/questions/41174549

复制
相关文章

相似问题

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