我知道 ulimit -s unlimited 技巧(修复 libc 的地址),但我不明白背后的事实,任何人都可以帮我解释一下吗?~ thx
问问题
1633 次
1 回答
2
根据 bash 手册页
ulimit 在允许这种控制的系统上提供对 shell 可用资源和由它启动的进程的控制。
-s 标志定义最大堆栈大小。
因此ulimit -s unlimited
删除了堆栈大小的最大限制,这启用了旧版 mmap 功能。
在 32 位系统上,“ulimit -s unlimited”禁用 mmap()-ing 的随机化,因为内核中 arch/x86/mm/mmap.c 中的以下代码:
static int mmap_is_legacy(void)
{
if (current->personality & ADDR_COMPAT_LAYOUT)
return 1;
if (rlimit(RLIMIT_STACK) == RLIM_INFINITY)
return 1;
return sysctl_legacy_va_layout;
}
于 2014-11-27T17:18:10.020 回答