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

标签 linux

有没有系统调用或函数可以通过页地址获取可读、可写、可执行等页属性? 我知道我们可以使用 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/

相关文章:

linux - Apache和linux文件权限无法浏览文件或目录

linux - 从bash脚本启动Shrewsoft

linux - 在脚本中执行 cqlsh

linux - 将 chromium 安装到 Linux 磁盘镜像?

linux - 如何比较两个压缩包的内容

linux - 最近创建的随后删除的文件的 block 是否会被写回光盘?

php - UTF-8贯穿始终

linux - 值未在 while 循环内分配

linux - 在 Fedora 23 下 1h 33m 后使用 arecord 的记录停止

linux - 如何强制禁用 intel_pstate?即使在 grub 中使用 intel_pstate=disable 选项,intel_pstate 也会在重新启动时启用