опция gcc -fno-stack-protector - PullRequest
3 голосов
/ 06 марта 2012

Я работаю над школьным проектом, и в основном мы пытаемся узнать о переполнении стека. Пример кода, над которым я работаю, в основном: (обрезан)

char test[10];
int i;
for (i=0;i < 10000;i++) {
    test[i] = 'a';
}

Когда я компилирую это с помощью gcc, все работает нормально. Gcc автоматически защищает стек и никогда не допускает его чрезмерного переполнения. Теперь, если я попытаюсь использовать gcc -fno-stack-protector .... точно такая же программа будет запущена. Я даже делаю diff для файлов сборки (опция -S), и они идентичны. Что дает? Я просматривал справочные страницы, и там не было упоминания о опции -fno-stack ... Все онлайн указывает на опцию -fno-stack-protector, но я вообще не смог ничего воссоздать ...

Заранее благодарю за помощь. :)

1 Ответ

3 голосов
/ 06 марта 2012

Ты уверен? Мина дает (если защита стека не отключена):

.L2:
        cmpl    $9999, -36(%rbp)
        jle     .L3
        movq    -8(%rbp), %rdx
        xorq    %fs:40, %rdx
        je      .L5
        call    __stack_chk_fail

от

int test() {
char test[10];
int i;
for (i=0;i < 10000;i++) {
  test[i] = 'a';
 }
}
...