在Linux中通过系统调用获取页面属性

时间:2012-02-24 03:26:02

标签: linux

是否有任何系统调用或函数可以获取页面属性,如可读,可写,可通过页面地址执行? 我知道我们可以使用mprotect来设置pages属性,但我不知道我们是否可以获取pages属性。任何评论都表示赞赏。

1 个答案:

答案 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()字段。