我在嵌入式设备上遇到了一个问题,我认为这可能与堆栈溢出有关。
为了测试这一点,我计划用魔法字节填充堆栈,然后通过检查有多少魔法字节完好无损,定期检查堆栈是否溢出。
但我无法让标记堆栈工作的例程。该应用程序不断崩溃。这就是我在程序入口处所做的。
//fill most of stack with magic bytes
int stackvar = 0;
int stackAddr = (int)&stackvar;
int stackAddrEnd = stackAddr - 25000;
BYTE* stackEnd = (BYTE*) stackAddrEnd;
for(int i = 0; i < 25000; ++i)
{
*(stackEnd + i) = 0xFA;
}
请注意,分配的堆栈大于 25k。所以我指望此时已经使用了一些堆栈空间。另请注意,堆栈从较高地址向较低地址增长,这就是我尝试从底部向上填充的原因。
但正如我所说,这将崩溃。我一定在这里遗漏了一些东西。