在 Win32 平台上写入内存缓冲区并检查它是否已满并出现 SEH 异常?
Write to a memory buffer and check if it is full with a SEH exception on Win32 platform?
是否可以使用 Win32 API 分配一个大约 64KB 大小的内存缓冲区,并在该缓冲区之后有某种 "guard zone"(我不知道正确的术语)所以如果缓冲区已满,C++ 代码将写入缓冲区并抛出 SEH 异常并尝试写入 "guard zone"?
是的。使用 VirtualAlloc
。与 VirutalProtect
结合使用,您甚至可以使此保护区仅为内存页面大小(4096 字节,而不是整个 64KB)。
请注意,堆栈由OS处理,您只能通过SetThreadStackGuarantee
控制它来设置堆栈溢出前的缓冲区数量,以及_resetstkoflw
修复(恢复) 在堆栈溢出异常被 hadled 后守卫。
是否可以使用 Win32 API 分配一个大约 64KB 大小的内存缓冲区,并在该缓冲区之后有某种 "guard zone"(我不知道正确的术语)所以如果缓冲区已满,C++ 代码将写入缓冲区并抛出 SEH 异常并尝试写入 "guard zone"?
是的。使用 VirtualAlloc
。与 VirutalProtect
结合使用,您甚至可以使此保护区仅为内存页面大小(4096 字节,而不是整个 64KB)。
请注意,堆栈由OS处理,您只能通过SetThreadStackGuarantee
控制它来设置堆栈溢出前的缓冲区数量,以及_resetstkoflw
修复(恢复) 在堆栈溢出异常被 hadled 后守卫。