使用setrlimit()设置堆栈大小并引发堆栈溢出/段错误
在下面的给出示例中,我尝试将stacksize设置为1kb。
为什么现在可以在堆栈中分配一个大小为
8kb
的整数数组?
#include <stdio.h>
#include <sys/resource.h>
void foo(void);
int main() {
struct rlimit lim = {1024, 1024};
if (setrlimit(RLIMIT_STACK, &lim) == -1)
return 1;
foo();
return 0;
}
void foo() {
unsigned ints[2048];
printf("foo: %un", ints[2047]=42);
}
没有找到相关结果
已邀请:
2 个回复
森含械
上分配的一些额外页面所需的任何内容(2.6.33 1,2中的20页,2.6.34 3上的128 Kb)。 综上所述:
哪里
此外,使用Ingo Molnar的
补丁(Fedora,Ubuntu,......)的内核还有一个额外的EXEC_STACK_BIAS“(2MB以上可以覆盖随机化效果。)”,请参阅
([Ubuntu1],[Ubuntu2]调用新函数
],[Ubuntu3])。 我编辑了原始程序来显示:
结果如下:
峨躬坎抬焚
移动了“资源指针”,但是在你ѭѭ新的程序副本之前不会应用新的限制。
并且测试运行: $ ./a.out lim:8388608 / -1 foo 1:42 lim:65536/65536 foo 2:42 杀害 为什么在打印限制之前(以及在调用foo之前)进程被杀死,我不知道。