スタック破壊検出コードの生成(#pragma stack_protector/#pragma no_stack_protector) 【Professional 版のみ】 【V1.02以降】 |
関数の入口および出口にスタック破壊を検出するコードを生成します。
(1) 関数の入口で,ローカル変数領域の直前(0xFFFF番地に向かう方向)に2バイトの領域を確保し,その領域にnumで指定した値を格納します。
(2) 関数の出口で,numを格納した2バイトの領域が書き換わっていないことをチェックします。
(3) (2)で書き換わっている場合には,スタックが破壊されたとして__stack_chk_fail関数を呼び出します。
__stack_chk_fail関数は,オプション-stack_protector,-stack_protector_allと#pragma stack_protectorに関わらずスタック破壊検出コードの生成の対象にはなりません。 |
#pragma no_stack_protectorが指定された関数は,-stack_protectorオプション,-stack_protector_allオプションに関わらず,スタック破壊検出コードを生成しません。 |
#pragma stack_protector [(]関数名[(num=数値)][,関数名[(num=数値)]][,...][)] #pragma no_stack_protector [(]関数名[,...][)] |
-stack_protectorオプションまたは-stack_protector_allオプションと同時に使用した場合は,#pragma stack_protector/#pragma no_stack_protector指定が有効になります。 |
#pragma inline,__inlineキーワード,#pragma inline_asm,#pragma no_stack_protector,#pragma rtos_interrupt,#pragma rtos_task