Hi,
how does noreturn attribute work? Trying to get this [0] to work, I
error on noreturn.
/* Note how buffer overruns are undefined behavior and the compilers tend to
optimize these checks away if you wrote them yourself, this only works
robustly because the compiler did it itself. */
extern uintptr_t __stack_chk_guard;
noreturn void __stack_chk_fail(void);
void foo(const char* str)
{
uintptr_t canary = __stack_chk_guard;
char buffer[16];
strcpy(buffer, str);
if ( (canary = canary ^ __stack_chk_guard) != 0 )
__stack_chk_fail();
}
main.c:7:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
noreturn void __stack_chk_fail(void);
tried
void __stack_chk_fail(void) __attribute ((noreturn));
instead.
[0]
http://wiki.osdev.org/Stack_Smashing_Protector
Received on Thu Sep 22 2016 - 20:04:44 CEST