Я хочу включить функцию защиты стека в gcc для системы, которую я создаю для x86 linux.Есть ли способ «перегрузить» или переопределить __stack_chk_fail?
Я хочу, чтобы, если он обнаруживает разбиение стека, он будет вызывать функцию моего собственного, которая будет обрабатывать случай, или она вызовет мою собственную реализацию функции __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!");
}
Я также попытался с помощью LD_PRELOAD
но в результате ошибки сегментации при битье стека, но это также приводит к ошибке сегментации.
C не поддерживает перегрузку, это язык, отличный от C++. Не используйте спам-теги. – Olaf
@ Олаф, я знаю, c не поддерживает перегрузку метода, но у меня нет лучшего имени для того, что я пытаюсь сделать. – omer12433
Итак, поскольку вы решили использовать C, мне все равно интересно, почему вы использовали тег C++. Так или иначе, мой комментарий применим. На ваш вопрос: что вы имеете в виду под «undef ...», вы не можете «undef» переменную или функцию. Это не макрос. Что касается segfault: вы вызываете неопределенное поведение и ваш код ведет себя неопределенным. Я бы сказал, что все работает как ожидалось, миссия выполнена, без проблем. – Olaf