是否有任何系统调用或函数可以获取页面属性,如可读,可写,可通过页面地址执行? 我知道我们可以使用mprotect来设置pages属性,但我不知道我们是否可以获取pages属性。任何评论都表示赞赏。
答案 0 :(得分:3)
没有。您需要使用proc接口,其中包含有关各种文件中每个进程的大量信息。您正在寻找的信息是明文,/proc/<pid>/maps
。您可以通过运行来查看当前流程:
$ cat /proc/$$/maps
您可以在man 5 proc中找到更多信息。
以上链接给出的例子是:
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm
08058000-0805b000 rwxp 00000000 00:00 0
40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so
40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so
4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so
40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so
4013e000-40142000 rw-p 00000000 00:00 0
bffff000-c0000000 rwxp 00000000 00:00 0
如您所见,权限是第二个(空格分隔的)字段。所以,从一个程序(比如C
,因为你提到mprotect()
),你可以用/proc/$$/maps
打开fopen()
,然后使用fgets()
或{{1}将数据拉出来。您只需查找页面所在范围内的scanf()
字段。