Lobsters | 原文链接 | 2026-09-05 收录

NX 位不只是安全的事:一场 ARM64 超管理器「灵异」崩溃的逐层调试

来源: purplesyringa.moe — 2026-09-04

概述

一篇由 Sonya 撰写、发在 purplesyringa 博客上的「友稿」,记录了一场长达数月、几乎逼疯人的 ARM64 裸机超管理器调试。开发者在为 postmarketOS 编写拦截 CTR_EL0 等特殊功能寄存器访问的超管理器时,只要开启拦截,手机就会随机锁死、被看门狗复位。作者依次排除 MRS/MSR 模拟错误、异常处理蹦床、寄存器保存等问题,甚至怀疑是「超出规范的 ARM 硬件」或 /dev/urandom 在捣乱。真正的元凶出奇地平凡:他们把一串指向可执行指令的处理函数数组在运行时做了排序,而 ARM 不像 x86 那样保证指令缓存与数据缓存一致性——修改可执行内存后若不显式刷新 icache,CPU 拿到的仍是旧缓存里的指令。最终用二进制二分法定位到这条「搬运可执行代码」的排序,并在构建阶段完成排序以绕开问题。标题里「NX 位不只是安全」点出:执行权限相关的内存处理,在缓存一致性这一更底层问题上还有一层容易被忽视的坑。

核心要点

金句

As you may know, ARM is not Icache/Dcache-coherent, which means that modifications to the data do not automatically propagate to the instruction fetches.(你可能知道,ARM 并不保证指令缓存与数据缓存一致——对数据的修改并不会自动传导到取指。)
返回 Lobsters 首页