/dev/mem的访问权限

2024-04-18

我有一系列关于/dev/mem:

  1. 网上很多文章,好像都提到了/dev/mem作为通往"Physical RAM"。但如果我是对的/dev/mem是通往"Physical Address Space"处理器的控制寄存器可能包括许多硬件外设的控制寄存器而不仅仅是 RAM?如果我错了,请纠正我!

  2. 为了防止攻击者滥用/dev/mem并改变内核内存,一个标志CONFIG_STRICT_DEVMEM需要启用,这将阻止用户应用程序访问超过 1MB 的物理地址空间。我检查了我的电脑(Ubuntu)上的配置文件,发现CONFIG_STRICT_DEVMEM = y。我编写了一个程序,尝试读取超过 1 MB 的物理内存,并且我能够读取!没有分段错误或任何Operation NOT Permitted错误。这怎么可能?

我的程序大致是这样的:

fd = open ( "/dev/mem", O_RDWR);
ptr = (int*) mmap(0, MAP_SIZE, PROT_READ, fd, myAddress & (~MAP_MASK));
printf("%d", *ptr);

  1. 是的,你没看错,/dev/mem 允许你映射任何物理地址,包括非 RAM 内存映射的 IO。这对于在不编写内核驱动程序的情况下访问某些硬件设备的快速而肮脏的黑客攻击非常有用。

  2. CONFIG_STRICT_DEVMEM 使内核检查 /dev/mem 中的地址devmem_is_allowed() in arch/x86/mm/init.c,那里的评论解释道:

    * On x86, access has to be given to the first megabyte of ram because that area
    * contains bios code and data regions used by X and dosemu and similar apps.
    * Access has to be given to non-kernel-ram areas as well, these contain the PCI
    * mmio resources as well as potential bios/acpi data regions.
    

    你的地址0xFFFF0000很可能是非 RAM,因为 BIOS 通常将 IO 内存设置为略低于 4GB,因此即使使用 STRICT_DEVMEM,您也能够映射它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

/dev/mem的访问权限 的相关文章

随机推荐

  • 使用python将数据写入谷歌云存储

    我找不到使用 python 将本地计算机中的数据集写入谷歌云存储的方法 我进行了很多研究 但没有找到任何与此相关的线索 需要帮助 谢谢 简单的例子 使用谷歌云 https googlecloudplatform github io goog
  • 使用 GTK 构建 GUI#

    我可能需要使用 C 和 Mono 构建 GTK GUI 如果我理解正确的话 这意味着我有3个选择 编写 C 代码来调用 GTK 包装器类 GUI 是 在代码中 使用 MonoDevelop GUI 设计器 这使用 stetic 标记构建了一
  • 在 Xamarin.Forms 中编写设备平台特定的代码

    我有以下内容Xamarin Forms ContentPage类结构 public class MyPage ContentPage public MyPage do work to initialize MyPage public voi
  • 在 Apps 脚本上创建新触发器时收到错误

    尝试创建新触发器时收到此错误 脚本授权失败 请检查您的弹出窗口阻止程序设置 然后重试 已尝试允许该网站接受弹出窗口 甚至关闭弹出窗口阻止程序 但没有产生任何影响 有人有解决办法吗 我遇到了同样的问题 并设法通过首先从脚本编辑器手动执行我的脚
  • PHP 7 用户会话问题 - 无法初始化存储模块

    在 PHP 7 0 中使用各种 PHP 框架会话驱动程序时存在错误 我最初在使用 CodeIgniter 数据库驱动程序时遇到了这个问题 并认为这是一个 CodeIgniter 问题 但后来在多个会话驱动程序和多个框架上遇到了这个问题 此时
  • 在android中使用多点触控进行旋转、缩放和移动

    我想在多点触摸事件上旋转 缩放和移动图像 它似乎工作正常 但工作不完美 我真的很想修复我的错误代码 所以请帮助我 我的代码在那里 public class ImageControl extends Activity DragView dra
  • 使用 Selenium IDE 解析查询字符串值的 URL

    我是集成测试的新手 但到目前为止 我已经使用 Se IDE 构建了一套测试 取得了巨大的成功 当我运行测试时 我突然意识到我正在生成大量数据 并且我想自己清理 我的大多数测试都涉及创建一个新的 页面 并且 id 在查询字符串中可用 我想让
  • __doPostBack() 函数不起作用 (asp.net)

    我正在尝试从 JS 代码触发按钮事件 但doPostBack在JS函数中reg 不指向 c 代码 请告诉我出了什么问题 这是我的代码
  • 正则表达式返回未定义的字符串

    我试图从磁力链接中提取哈希值 但它返回不明确的 var tesst magnet xt urn btih 2B78EDFDDC87DC9605FB285997A80B787888C194 var test tesst match magne
  • 当文本框为空时,C++ Windows 窗体应用程序出现未处理的异常错误

    我正在 Visual Studio 中为 C 课程构建温度转换应用程序 它是一个 Windows 窗体应用程序 我的问题是 当我运行应用程序时 如果我没有在 txtFahrenheit 或 txtCelsius2 文本框中输入任何内容 我会
  • 委托和变量范围

    我有以下代码 public void SetMove Position3D pos float time float linearity bool relative ExecuteOnActiveClients delegate Neuro
  • 32 位整数按位与

    如何在 C 中对两个 32 位整数执行按位 AND 运算 Related 最常见的 C 位运算 https stackoverflow com questions 93744 most common c bitwise operations
  • WPF MVVM - ItemsControl 内部的命令绑定

    我目前正在将一个小型 WPF 项目转换为 MVVM 我有一个List
  • 在 jQuery 模板中获取索引

    我正在使用 jQuery 模板插件 不知道如何获取项目的索引 http api jquery com category plugins templates http api jquery com category plugins templ
  • 解析器组合器的类型

    如果我有一个解析器a Parser A和一个解析器b Parser B然后我可以将它组合成一个解析器a b Parser Either A B 这可行 但当您开始添加更多替代方案并获取类似类型时 会变得有点棘手Either A Either
  • Play Framework 2.6 CSRF 和会话

    我遇到了奇怪的问题 我正在我的网站上实现购物车功能 并使用会话来存储购物车位置 我有一个 POST 操作来将新位置添加到购物车 并且我启用了 CSRF 过滤器来保护网站 我在产品页面上用ajax调用它 所以第一次调用没问题 但第二次调用说未
  • Android相机参数setPictureSize导致图片出现条纹

    我正在尝试使用 Android 相机拍照 我需要捕获 1600 宽 x 1200 高 图像 第 3 方供应商要求 我的代码似乎适用于许多手机摄像头 但 setPictureSize 会导致某些手机 三星 Galaxy S4 三星 Galax
  • 为什么 Java 的 SSLSocket 发送版本 2 客户端问候?

    The SSLSocket getEnabledProtocols 方法返回以下内容 SSLv2Hello SSLv3 TLSv1 事实上 当我打电话时connect 并且我打开了 SSL 调试 我看到使用了 v2 客户端 hello ma
  • Java:BufferedReader 的 readLine 方法的效率和可能的替代方案

    我们正在努力减少延迟并提高用 Java 编写的进程的性能 该进程通过 readLine 方法从套接字消费数据 xml 字符串 缓冲读取器 http java sun com javase 6 docs api java io Buffere
  • /dev/mem的访问权限

    我有一系列关于 dev mem 网上很多文章 好像都提到了 dev mem作为通往 Physical RAM 但如果我是对的 dev mem是通往 Physical Address Space 处理器的控制寄存器可能包括许多硬件外设的控制寄