如何在运行时检查内存地址是否可写?
例如,我想要在以下代码中实现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;
}
mprotect
函数来设置内存保护,但是没有直接的方法来查询内存保护状态。请查看这个问题:http://stackoverflow.com/questions/3585641/how-to-get-the-memory-access-type-in-c-c-in-linux - user1129665readelf
的功能?并通过解析ELF结构来检查可读写部分? - Amir Naghizadeh