如何解决如何保护数据部分?
我想保护数据部分。以下程序将无法正确运行。我知道 mprotect()
的第一个参数应该对齐。但是如何获得数据段对齐的内存地址?
#include <string.h>
#include <sys/mman.h>
#include <stdio.h>
char s[] = "Hello World!";
int main() {
if(mprotect(s,strlen(s) + 1,PROT_EXEC) == -1) {
perror("mprotect()");
return 1;
}
}
$ ./mprotect_prog
mprotect(): Invalid argument
编辑:我使用以下代码来获取页面大小。
{
builtin printf %s '#define PAGESIZE '
getconf PAGESIZE
} > pagesize.h
然后将C代码改成如下。
#include <string.h>
#include <sys/mman.h>
#include <stdio.h>
#include "pagesize.h"
char s[] __attribute__((aligned(PAGESIZE))) = "Hello World!";
int main() {
if(mprotect(s,PROT_EXEC) == -1) {
perror("mprotect()");
return 1;
}
}
然后,我遇到了分段错误。有人能重现这个错误吗?有什么问题吗?
$ ./mprotect_prog
Segmentation fault
EDIT2:我必须在 's' 行下方添加以下行以确保 s
单独占据整个页面。然后,程序运行起来。
char r[] __attribute__((aligned(PAGESIZE))) = "Hello World!";
解决方法
{
builtin printf %s '#define PAGESIZE '
getconf PAGESIZE
} > pagesize.h
#include <string.h>
#include <sys/mman.h>
#include <stdio.h>
#include "pagesize.h"
char s[] __attribute__((aligned(PAGESIZE))) = "Hello World!";
char r[] __attribute__((aligned(PAGESIZE))) = "Hello World!";
int main() {
if(mprotect(s,strlen(s) + 1,PROT_EXEC) == -1) {
perror("mprotect()");
return 1;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。