Проблемы с реализацией clang -fno-stack-protector для компиляции кода на Macbook Pro - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь проверить пример переполнения буфера.

Ниже приведен мой код, который я пытаюсь скомпилировать с именем файла 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

Почему это может происходить? Я провел много исследований и не могу найти ничего, что решило бы эту конкретную проблему.

1 Ответ

3 голосов
/ 11 июня 2019

Почему это может происходить?

Это происходит потому, что вы переполнили буфер!

Это буквально то, что вы хотели наблюдать: что происходит, когда вы переполняете буфер.

Результаты могут отличаться, как всегда в случае неопределенного поведения.

Прекратить переполнение буфера.

...