# 内存错误之 Slide 计算
KASLR (Kernel Address Space Layout Randomization):内核地址空间布局随机化,是 macOS
所使用的一项内存管理技术,它会在内存基址上加一个 Slide
值,用于保护内核安全。
Slide
的有效范围是 8 - 255,转化为 16 进制就是 8 - FF ,乘 200000(16 进制)得出的内存基址Start
范围为 1000000 - 1FE00000
我们通常说的内存错误指的是引导过程马上卡住并出现了下列错误代码,大部分情况下可以通过更换内存补丁解决。但在一些台式机上,有时候换内存补丁也无法解决,由于台式机硬件自由度高,内存补丁可能无法根据我们的硬件正确的修复内存问题,这个时候就需要计算 Slide
值来启用 KASLR
内存管理技术了。
Error allocating 0x0x116F6 pages at 0x00000000093eb000 alloc type 2
注意上述代码中的 0x116F6,是出错的 Page
值,接下来我们将利用这个值来确定需要提供给 KASLR
的内存基址 Start
的值
进入 clover
,打开 UEFI Shell 64
界面,输入 memmap -b
,找到第一个 Start
大于 1000000(对应 Slide
最小值 8)且 Page
值大于 0x116F6 (出错的 Page
值) 的 Available
类型数据,如下所示
Available 00000000 1000B000 00000000 5F04FFFF 00000000 0004F045 00000000 0000000F
可见 1000B000 在这个范围内,使用十六进制计算器用这个值除 200000(16 进制)得出的值转为十进制向上取整即可
例如 1000B000(十六进制)/ 200000(十六进制)= 128.02(十进制)向上取整为 129,接下来我们将 slide=129
添加到引导参数中,问题基本上都能解决
在线十六进制计算器:http://www.99cankao.com/digital-computation/hex-calculator.php
← 黑苹果引导配置教程 常用硬件驱动方案选择 →