Прервать прерывание вместо переполнения буфера - PullRequest
5 голосов
/ 30 июля 2011

Я читал отличную книгу Хакинг Джона Эриксона. Я хотел скомпилировать пример переполнения буфера и отладить его, но вместо записи за пределы выделенного пространства приложение просто отвечает «Abort trap». Это какие-то меры безопасности, введенные Xcode или Mac OS? Автор использует сырые gcc и Debian.

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int value = 5;
    char buffer_one[8], buffer_two[8];

    strcpy(buffer_one, "one"); /* put "one" into buffer_one */
    strcpy(buffer_two, "two"); /* put "two" into buffer_two */

    printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
    printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
    printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value, value, value);

    printf("\n[STRCPY] copying %d bytes into buffer_two\n\n",  strlen(argv[1]));
    strcpy(buffer_two, argv[1]); /* copy first argument into buffer_two */

    printf("[AFTER] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
    printf("[AFTER] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
    printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);
}

1 Ответ

5 голосов
/ 30 июля 2011

Это защита от переполнения - хотя я не уверен насчет XCode / OSX, с gcc вы можете передать -fno-stack-protector и отключить ASLR

linux:  sudo echo 0 > /proc/sys/kernel/randomize_va_space

Эта статьяпомогает Разбить стек в 2011 году

Вы сможете узнать, как отключить защиту, чтобы играть с этим кодом.

Я читаю ту же книгу, кстати- Мне пришлось настроить / Google вокруг, чтобы сделать некоторые вещи актуальными для 2011 года.

...