4

我知道 ulimit -s unlimited 技巧(修复 libc 的地址),但我不明白背后的事实,任何人都可以帮我解释一下吗?~ thx

4

1 回答 1

2

根据 bash 手册页

ulimit 在允许这种控制的系统上提供对 shell 可用资源和由它启动的进程的控制。

-s 标志定义最大堆栈大小。

因此ulimit -s unlimited删除了堆栈大小的最大限制,这启用了旧版 mmap 功能。

根据Hexcellent

在 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 回答