【发布时间】:2012-09-25 22:14:31
【问题描述】:
我尝试通过修改 process.c 中的 arch_align_stack() 来“改进”我自己的 x86 32 位机器上的 ASLR,方法是将第二个参数增加为模 in:
if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
sp -= get_random_int() % 8192;
return sp & ~0xf;
但是我很快发现,过多地篡改它会导致内核恐慌;而且我怀疑它会使系统不稳定,即使只是对其进行一些篡改(它很可能会在一段时间内幸存下来,很可能?)。
这促使我问了一个关于为什么会发生这种情况的问题(Why does the stack have to be page aligned? 的原始问题)。显然这是因为(如用户“mpe”所述)默认堆栈大小为 8 kiB,即 8192 字节。那么通过扩展增加内核中的堆栈大小,这个参数(8192)应该可以增加吗?还提到堆栈本身的位置可以随机化。
Pax 会这样做吗?如果没有,那为什么不呢?
内核中如何/在哪里指定堆栈大小? 32 位和 64 位有区别吗?
32 位和 64 位之间有什么区别吗? 64 位仍然使用 process.c 来处理这些东西吗?我看到在 process_64.c 中似乎没有与此代码等效的内容。
【问题讨论】:
-
我设法忽略了这一点,对此感到抱歉。我已经完成了我之前的四个问题并进行了更正。谢谢。
-
现在好多了,我会碰你,因为你花时间:)
标签: c linux linux-kernel aslr