Generating a code for detection of stack smashing (#pragma stack_protector/#pragma no_stack_protector) [Professional Edition only] [V1.02 or later] |
This generates a code for detection of stack smashing at the entry and end of a function.
This allocates a 2-byte area just before the local variable area (in the direction towards address 0xFFFFF) at the entry to a function, and the value specified by num is stored. After that, the 2-byte area in which num was stored is checked for smashing at the end of the function. If smashing has occurred, the __stack_chk_fail function is called. |
The __stack_chk_fail function needs to be provided by the user. |
A code for detection of stack smashing is not generated for a function for which #pragma no_stack_protector has been specified regardless of the -stack_protector option and -stack_protector_all option. |
Declare #pragma stack_protector/#pragma no_stack_protector before the first declaration of a variable. |
#pragma stack_protector [(] function-name[(num=number)][)] #pragma no_stack_protector [(] function-name [)] |
Specify an integer from 0 to 65535 for the number to be set in num. If "= number" is omitted, the compiler automatically specifies the integer value. |
If this option is used simultaneously with the -stack_protector option or -stack_protector_all option, the specification by #pragma stack_protector/#pragma no_stack_protector becomes valid. |
A compile error will occur when #pragma stack_protector and #pragma no_stack_protector are specified simultaneously for the same function within a single translation unit. |