系统编程入门:C++优势与安全挑战解析
1. 系统调用的安全隐患
在操作系统加载应用程序栈和执行 SYSRET 之间,可能会触发不可屏蔽中断(NMI)。这种竞态条件会导致以根权限执行的 NMI 代码使用应用程序栈而非内核栈,从而可能引发安全漏洞或系统损坏。不过,现代操作系统(如 Linux)有办法防范此类攻击。
2. Meltdown 和 Spectre 攻击
为支持系统调用的快速执行,采用 3:1 内存分割技术将内核内存映射到每个应用程序中,即应用程序内存与内核内存的比例为 3:1。为防止应用程序读写可能包含加密密钥和密码等敏感信息的内核内存,现代 CPU 架构提供了锁定内核内存部分的机制,使应用程序只能访问其非特权部分的内存。
为提高现代 CPU 的性能,大多数架构(如 Intel、AMD 和 ARM)采用了推测执行技术。例如以下代码:
if (x) {
do_y();
}
do_z();
CPU 在执行该指令之前并不知道 x 是真还是假。如果 CPU 假设 x 为真,就可以节省一些 CPU 周期来提高性能。如果 x 实际上为真,CPU 就节省了周期;如果 x 为假,这种风险通常也是值得的,特别是当 CPU 能根据经验判断 x 为真的可能性时(例如,过去执行该语句时 x 为真)。这种优化方式称为推测执行,即 CPU 会执行代码
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



