- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
随着学期截止日期的临近,我决定开始在我的大学从事操作系统类(class)的项目。项目作业的问题在于它要求学生开发一个用户应用程序 (exe
),它将作为一个简单的内核(基本进程和线程管理)执行。
我首先想到的是:我到底应该如何在用户应用程序中执行特权代码?
在咨询了其他学生(谁按时完成了项目)之后,我了解到他们能够使用 Borland 3.1 编译器毫无问题地执行特权代码。然而,他们都没有发现这很奇怪,也不知道为什么会这样。 Borland 为什么(这里更好的问题是如何)这样做?这不会违反操作系统安全的基本原则吗?
注意:我添加了 C++ 标记,因为该项目应该作为 C++ 应用程序编写,大部分特权代码作为内联汇编执行。
更新 我的问题最初措辞不佳。当然,我能够使用任何编译器使用特权指令编译代码——运行代码就是问题所在。
最佳答案
两件事:
在 8086 实模式时代,没有特权级别。 Borland 3.1 是一个 16 位编译器。如果您在现代版本的 Windows 上运行它生成的代码,它将使用 NTVDM 在虚拟 8086 模式下运行,NTVDM 也没有特权级别。
即使在使用现代编译器/汇编器时,即使在保护模式和长模式下,它通常也不会提示特权指令。这段源代码在 MSVC 2015 中编译得很好,但每当我运行它时就会崩溃,因为它试图访问用户模式应用程序禁止访问的寄存器:
int main(){ __asm { mov eax, cr0 or eax, 1 mov cr0, eax } return 0;}
关于c++ - 从用户应用程序访问 ring 0 模式(以及为什么 Borland 允许这样做),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448198/
我想知道 dpdk 是如何绕过内核的。用户空间应用程序如何访问 NIC 空间。 dpdk访问网卡用什么工具?我知道,dpdk 使用 uio_pci_generic 或 igb_uio 或 vfio-p
我一直在学习有关 Windows 驱动程序开发的基础知识,我一直在寻找术语 Ring 0 和 Ring 3。这些是指什么?它们与内核模式和用户模式相同吗? 最佳答案 Linux x86 环使用概述 了
我被引导相信 Pedestal 是 Ring 的替代品,但是从所有示例中我看到 Pedestal 实际上使用了 Ring。这是最令人困惑的!我是否需要了解并了解 Ring 的工作原理才能有效使用 Pe
我复制了一些在 compojure 1.1.18 和其他旧库中工作的旧代码,但使用最新版本我无法让它工作。 这是我的 minimal example code复制自 the minimal examp
为什么 golang 中的列表/环类型为单个项目使用额外的结构 Element/Ring 而不是 interface{} ?我假设有一些好处,但我看不到。 编辑:我的意思是询问 api,而不是关于在实
FileNotFoundException Could not locate ring/util/request__init.class or ring/util/request.clj on cla
使用 Ring 的 Jetty 适配器,如果我的请求太大,我会收到 413: FULL HEAD 错误。我将它追踪到一个名为 headerbuffersize 的属性,但是当我尝试在 run-jett
上下文 我刚刚得到http://blog.jayfields.com/2011/02/clojure-web-socket-introduction.html工作。 我还可以使用ring + comp
我正在尝试创建文本文件的精确副本,并且我正在使用循环缓冲区。 我使用的写入方法是: void addItem(CircularBuffer *cBuff, BufferItem *cbItem) {
void sema_down (struct semaphore *sema) { old_level = intr_disable (); while (sema->value == 0)
我的问题是,如果已经读取了 Ring 请求的正文,我该如何惯用地读取它? 这是背景。我正在为 Ring 应用程序编写一个错误处理程序。当发生错误时,我想记录错误,包括重现和修复错误可能需要的所有相关信
我正在制作一个 Messenger 机器人,并使用 Ring 作为我的 http 框架。 有时我想在机器人发送的消息之间应用延迟。我的期望是使用 Thread/sleep 是安全的,因为这将使事件线程
我在 Emacs 中有以下代码可以删除突出显示区域中的换行符: (defun remove-newlines-in-region () "Removes all newlines in the r
我是 Ring(以及一般的 Clojure 服务器端编程)新手。我有一个基于 Ring 的应用程序,在“开发模式”下运行良好,即它可以监听 localhost:3000 并做出适当的响应。作为部署此应
如何生成监听给定端口的独立环 uberjar ? 开发时,我使用以下 leiningen/ring 命令启动我的应用程序,我可以在其中指定端口: lein with-profile dev ring
我在 Emacs 中有以下代码可以删除突出显示区域中的换行符: (defun remove-newlines-in-region () "Removes all newlines in the r
我有一个任务 - 电话响起时立即更改铃声音量。例如:检测到有来电后,我需要将铃声音量设置为 0(静音),并且还应禁用振动器(如果尚未禁用)。然后当我需要执行另一个代码时会有延迟(startComput
我需要创建带间隙的圆形。 我正在创建一个代表时钟的进度条。 12 个间隙,每个间隙分配给小时数。 这正是我想要实现的目标。 (死星上的外环) 到目前为止,这是我的代码: 在activity.xml
我已经定义了一个简单的环形可绘制对象,将其用作按钮背景。这是我的做法: /> 我在相对布局中使用它,如: round_button 是我定义圆环的 xm
根据这个相关问题(Boost Polygon Serialization)。我正在尝试使用 Boost 序列化多边形。我现在遇到的问题是,我正在尝试使用自定义 X、Y、点的多边形来编译示例,但编译器在
我是一名优秀的程序员,十分优秀!