3
我知道堆栈大小可以通过限制设施进行控制,但内核如何强制执行一些限制,例如RLIMIT_STACK?由于linux不涉及堆栈操作(它只是一个mov或push指令),当超出限制时,内核如何发出SIGSEGV?我明白,对于虚拟寻址,CPU提供了Linux内核可以使用的工具。这与堆栈大小限制如何实施相似吗?或者,linux是否对堆栈大小进行例行检查并在犯罪发生后发出segfaults?还是有第三种选择?linux内核如何强制实现堆栈大小限制?
谢谢,这是有道理的。这是否意味着内存的前8mb(或堆栈大小限制)中的任何内容都将被内核映射为异常,而下面的区域必须通过SYS_BRK请求? –
brk/sbrk可以用我的libc来增加堆空间。手册页指定通常在数据区后面。堆栈内存理论上可以放置在任何内存位置,而许多内核和操作系统正是这样做的,这使得更难以利用其中存在安全错误的软件。 –