Previous: Tail Calls, Up: Stack and Calling


17.10.14 栈冲突保护

— Target Hook: tree TARGET_STACK_PROTECT_GUARD (void)

该钩子返回一个外部变量的DECL节点,用作栈保护者。 该变量在运行时被初始化为某个随即值, 并用于初始化放在局部栈帧顶端的警卫值。 该变量的类型必须为ptr_type_node

该钩子的缺省版本创建一个叫做‘__stack_chk_guard’的变量, 其通常在libgcc2.c中被定义。

— Target Hook: tree TARGET_STACK_PROTECT_FAIL (void)

该钩子返回一个tree表达式,用以警告运行时,栈保护者变量被修改了。 该表达式应该包括一个对无返回的(noreturn)函数的调用。

该钩子的缺省版本调用一个叫做‘__stack_chk_fail’的函数, 不接受任何参数。该函数通常在libgcc2.c中被定义。