有没有系统调用或函数可以通过页地址获取可读、可写、可执行等页属性? 我知道我们可以使用 mprotect 来设置 pages 属性,但我不知道我们是否可以获取 pages 属性。任何意见表示赞赏。
最佳答案
没有。您需要使用 proc 接口(interface),该接口(interface)在各种文件中包含有关每个进程的大量信息。您要查找的信息是明文形式,在 /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()
或 scanf()
来提取数据。你只是在看对于页面所在范围的 perms
字段。
关于linux - 在 Linux 中通过系统调用获取页面属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424951/