我想在 gcc 中为我正在构建的在 x86 linux 上运行的系统启用堆栈保护功能。
我希望如果它检测到堆栈粉碎,它会调用我自己的函数来处理这种情况,或者它会调用我自己的函数实现__stack_chk_fail,有没有办法做到这一点?
到目前为止,我试图民主基金__stack_chk_fail和__stack_chk_guard然后定义他们自己,但它没有工作,并试图利用缓冲区溢出时,导致分段错误。这是我所做的一个例子:
#undef __stack_chk_guard
#undef __stack_chk_fail
uintptr_t __stack_chk_guard = 0xdeadbeef;
void __stack_chk_fail(void)
{
printf("Stack smashing detected");
}
void foo(void)
{
char buffer[2];
strcpy(buffer, "hello, I am smashing your stack!");
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用,LD_PRELOAD但是在粉碎堆栈时导致分段错误,但它也导致分段错误。