これを行うための公式にサポートされている方法はありませんが。 現在のシステムでは、ポインタがスタックから来たかどうか(たとえば、呼び出し元のスタック)を検出する方法がありますか?メモリがスタックにあるかどうかを検出する方法は? (ヒープまたは静的変数ではない)
void my_function(void *arg) {
/* Only some configurations can do this (depending on compiler & arch). */
#if THE_MOONS_ALIGN
assert(not_stack_memory(arg));
#endif
/* ... actual logic ... */
}
最初のスタックポインタがわかっていて、スタックサイズがわかっている場合は、現在の変数が範囲内にあるかどうかを簡単に計算できます。簡単な例は、 'int main(void){int firstVar; char * ptrToFirstVar =(char *)&firstVar;/*今度は、スタックの先頭が短くなる*/char * endOfStack = ptrToFirstVar - yourSTACKSIZE; '次に、変数がスタックの開始点とスタックサイズの間にあるかどうかを確認します。 – tilz0R
@ tilz0Rまたはほとんどのプラットフォームは、この情報を照会するためのAPIを提供しています。 –
@AjayBrahmakshatriyaはあなたのコメントのほとんどの部分に注力しています。 – tilz0R