C 如何通过分段或分页防止缓冲区溢出?

C 如何通过分段或分页防止缓冲区溢出?,c,buffer,overflow,paging,C,Buffer,Overflow,Paging,如何利用分段和分页来防止缓冲区溢出? 一种猜测可能是——因为分段只为每个进程提供一部分内存,如果进程试图访问其分段之外的地址,则会发生SEGFULT。请告诉我这是否正确。 谢谢大家! 分段/分页不会阻止代码尝试访问其边界以外的内存。这是缓冲区溢出的定义,任何类型的内存保护都不会试图阻止断开的代码尝试执行它不允许执行的操作 分段或分页所能做的是阻止代码成功访问它不拥有的内存。操作系统真正拥有的唯一选择是终止硬件检测到的试图执行“坏”操作的进程。通过让代码不覆盖缓冲区的末端,可以防止缓冲区溢出。分段

如何利用分段和分页来防止缓冲区溢出? 一种猜测可能是——因为分段只为每个进程提供一部分内存,如果进程试图访问其分段之外的地址,则会发生SEGFULT。请告诉我这是否正确。
谢谢大家!

分段/分页不会阻止代码尝试访问其边界以外的内存。这是缓冲区溢出的定义,任何类型的内存保护都不会试图阻止断开的代码尝试执行它不允许执行的操作


分段或分页所能做的是阻止代码成功访问它不拥有的内存。操作系统真正拥有的唯一选择是终止硬件检测到的试图执行“坏”操作的进程。

通过让代码不覆盖缓冲区的末端,可以防止缓冲区溢出。分段/分页无法修复您的代码!在大多数情况下,这不会有用,但操作系统通常会向进程发送一条消息(在*nix系统中是一个信号),该进程可以拦截并处理该消息;导致进程终止的是未能截获信号,而不是无效的内存访问本身。一个可以控制内存页表的进程理论上可以很好地恢复,而一个正确使用setjmp/longjmp的进程也可以恢复,但正如我开始时所说的,这些情况很少见。