組み込みデバイスに問題があり、スタックオーバーフローに関連している可能性があります。
これをテストするために、スタックをマジックバイトで埋めてから、そのまま残っているマジックバイトの量を調べて、スタックがオーバーフローしたかどうかを定期的に確認することを計画していました。
しかし、スタックを機能させるためのルーチンを取得できません。アプリケーションは即座にクラッシュし続けます。これは、私がプログラムのエントリポイントで行ったことです。
//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より大きいことに注意してください。したがって、この時点ですでに使用されているスタックスペースを頼りにしています。また、スタックが上位から下位のアドレスに増加することにも注意してください。そのため、下から上に塗りつぶそうとしています。
しかし、私が言ったように、これはクラッシュします。私はここで何かが欠けているに違いありません。