首页 / LINUX / c-Linux上的ASLR限制
c-Linux上的ASLR限制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c-Linux上的ASLR限制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1527字,纯文字阅读大概需要3分钟。
内容图文
![c-Linux上的ASLR限制](/upload/InfoBanner/zyjiaocheng/946/1b3a5a38a00c48f99c6d795fb4ff6c6e.jpg)
我尝试通过在process.c中修改arch_align_stack()并通过增加第二个模数参数来“改进”我自己的x86 32位计算机上的ASLR:
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中似乎没有什么等效于此代码.
解决方法:
即使在香草内核中,堆栈的位置也是随机的.请注意,函数load_elf_binary()invokes randomize_stack_top()将堆栈的位置随机化.此功能是Linux堆栈ASLR的主要部分.
可以在here中找到有关ASLR在Linux内核中的很好描述.您可能会对堆栈随机化这一部分感兴趣.
实际上,arch_align_stack()的主要目的是通过超线程技术或类似技术来提高CPU上的缓存性能.此外,由于栈大小(内核栈大小的确为8K,但此函数将用户栈地址随机化)而未选择值8129,而是因为Intel建议.参见this和this.
THREAD_SIZE指定内核堆栈大小,如here中所述,x86-32和x86-64均为8K.用户堆栈大小不固定,因为堆栈可能会增长,除非受用户限制.
arch / x86 / kernel / process.c包含32位和64位通用的代码.这就是为什么arch / x86 / kernel / process_64.c(或arch / x86 / kernel / process_32.c)中没有等效代码的原因.
内容总结
以上是互联网集市为您收集整理的c-Linux上的ASLR限制全部内容,希望文章能够帮你解决c-Linux上的ASLR限制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。