2个版本
0.1.1 | 2021年9月24日 |
---|---|
0.1.0 | 2021年9月24日 |
#683 in 嵌入式开发
18KB
105 行
privilege_level
这个crate是一个快速简单的工具,用于获取CPU的当前权限级别。这个工具的主要用途可能是在内核中,你可能需要知道你的权限级别以便根据权限级别执行不同的操作。
支持的架构
定义了一个简单通用的API,允许你获取任何架构上的当前权限级别。主要的API不区分不同的架构,并且将特定架构的代码转换为架构无关的结构。这样你只需要关注代码运行在什么上下文中,而无需担心支持每个架构。
以下是当前支持的架构
x86_64
寻找帮助!
目前只支持x86_64
。这个项目是为sanders项目开发的,目前它仅仅是在尝试起飞。虽然我还在构建它并添加功能,但为了简单起见,我只关注x86_64
。最终,我将开始添加对更多架构的支持,但暂时我只关注x86_64
。
然而,这并不会阻止其他人贡献!如果你知道其他架构或需要支持不同的架构,请随意通过pull request添加对该架构的支持!任何帮助都将非常感激!
平台特定
如果你需要或想要特定架构的权限级别区分,提供了相关设施!所有架构都提供了特定的函数和结构,以便你具有符号设施来区分当前权限级别。目的是允许你区分公共API不显示的架构特定细节(例如,x86
上的环1和环2之间的差异)。
注意:这些函数和结构会根据配置标志从不支持的平台中移除,因此请确保正确设置你的调用代码。
示例
打印当前权限级别
use privilege_level::{privilege_level, PrivilegeLevel};
fn print_privilege_level() {
match privilege_level() {
PrivilegeLevel::Hypervisor => println!("Currently running as the hypervisor"),
PrivilegeLevel::Kernel => println!("Currently running as the kernel"),
PrivilegeLevel::Driver => println!("Currently running as a driver"),
PrivilegeLevel::User => println!("Currently running as a user program"),
}
}
获取当前x86
环级别
use privilege_level::{x86_64_privilege_level, x86_64PrivilegeLevel};
fn print_ring_level() {
match x86_64_privilege_level() {
x86_64PrivilegeLevel::Ring0 => println!("Currently in ring 0"),
x86_64PrivilegeLevel::Ring1 => println!("Currently in ring 1"),
x86_64PrivilegeLevel::Ring2 => println!("Currently in ring 2"),
x86_64PrivilegeLevel::Ring3 => println!("Currently in ring 3"),
}
}
保护函数免受未经授权的访问
use privilege_level::{privilege_level, PrivilegeLevel};
fn protected_function() {
if privilege_level() > PrivilegeLevel::Driver {
panic!("This function needs to run at driver level or higher!");
}
// do things with driver level permissions...
}
许可证
privilege_level
库和 s&ers 项目 采用 MIT 许可证。
依赖项
约 565KB
约 11K SLoC