【发布时间】:2013-01-21 06:35:41
【问题描述】:
如何在运行时检查内存地址是否可写?
例如,我想在下面的代码中实现 is_writable_address。有可能吗?
#include <stdio.h>
int is_writable_address(void *p) {
// TODO
}
void func(char *s) {
if (is_writable_address(s)) {
*s = 'x';
}
}
int main() {
char *s1 = "foo";
char s2[] = "bar";
func(s1);
func(s2);
printf("%s, %s\n", s1, s2);
return 0;
}
【问题讨论】:
-
鉴于已编译代码与生俱来的机器相关性,我认为这不可能。此外,我看不出您有任何理由想要这样做;我确信还有其他方法可以完成您打算做的任何事情。
-
Linux 有
mprotect设置内存保护但没有直接查询内存保护状态的方法。看看这个问题:stackoverflow.com/questions/3585641/… -
如果你不得不问,那你就做错了。
-
为什么不使用
readelf之类的功能?并通过解析ELF结构检查可读可写部分?
标签: c unix operating-system