【发布时间】:2013-12-21 07:40:49
【问题描述】:
我正在尝试使用保护修改 .text 段中的值以授予我写入权限:
int pageSize = sysconf(_SC_PAGE_SIZE);
int *toModify = (int *)(foo+5);
if (mprotect(toModify, pageSize, PROT_WRITE) < 0 ) {
perror("mprotect failed with error:");
return -1;
}
*toModify = 5;
printf("Modify :%i",foo());
mprotect 从不工作。它总是返回一个mprotect failed with error:: Invalid argument 错误。
foo 是一种返回 int 的方法,该 int 存储在函数之后 5 个字节(这就是 foo+5 的原因)
【问题讨论】:
-
来自documentation: "
mprotect()更改调用进程的内存页的保护,该内存页包含区间[addr, addr+len-1]中的地址范围的任何部分。addr必须是与页面边界对齐。"。
标签: c linux unix memory mprotect