# 内存错误之 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