Я пытаюсь проверить пример переполнения буфера.
Ниже приведен мой код, который я пытаюсь скомпилировать с именем файла buffOVF.c:
#include <stdlib.h>
#include <string.h>
int main(void)
{
//stack corruption
char buf2[16] = "overwriteme";
//slightly less than 16 bytes but it doesn't matter
char buf1[16];
//uninitialized
strcpy(buf1, "1234567890123456789");
//buffer contains 16 bytes, I've input 19 (overflow of 4 due to null ptr at end of string)
//writing to buf1
printf("buf1 val: %s\n", buf1);
printf("buf2 val: %s\n", buf2);
printf("buf1 addr: %p\n", (void *)buf1);
printf("buf2 addr: %p\n", (void *)buf2);
// TO RUN : gcc -o bufferOVF. bufferOVF.c -fno-stack-protector && clear && ./bufferOVF.
return 0;
}
Я пытаюсь скомпилировать это на Macbook Pro с OSX 10.14, используя следующую команду:
clang -o buffOVF. buffOVF.c -fno-stack-protector
Теперь я пытаюсь запустить этот без защиты стека, чтобы я мог видеть переполнение. Тем не менее, этого не происходит, так как я продолжаю получать это как мой вывод:
Abort trap: 6
Почему это может происходить? Я провел много исследований и не могу найти ничего, что решило бы эту конкретную проблему.