Синтаксическая ошибка gcc -o stdlib.h c Взломать искусство эксплуатации

Я работаю над вторым изданием "Взлом: искусство эксплуатации" Джона Эриксона, используя виртуальную машину (virutalbox) для запуска LiveCD, с которым она шла (Ubuntu 7.04). В разделе 0x272 "Использование кучи" автор объясняет функции malloc() и free(), используя пример на страницах 77–79.

Код для heap_example.c выглядит следующим образом:

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

int main(int argc,char *argv[]){
        char *char_ptr;
        int *int_ptr;
        int mem_size;

        if(argc < 2)
                mem_size = 50;
        else
                mem_size = atoi(argv[1]);

        printf("\t[+]allocating %d bytes of memory on the heap for char_ptr\n",mem_size);
        char_ptr = (char *)malloc(mem_size);

        if(char_ptr == NULL){  //Error checking,in case malloc() fails
                fprintf(stderr,"Error:could not allocate heap memory.\n");
                exit(-1);
        }

        strcpy(char_ptr,"This is memory is located on the heap.");
        printf("char_ptr(%p)-->'%s'\n",char_ptr,char_ptr);

        printf("\t[+]allocating 12 bytes of memory on the heap for int_ptr\n");
        int_ptr = (int *)malloc(12);

        if(int_ptr == NULL){
                fprintf(stderr,"Error:could not allocate heap memory.\n");
                exit(-1);
        }

        *int_ptr = 31337;
        printf("int_ptr (%p)--> %d\n",int_ptr,*int_ptr);

        printf("\t[-]freeing char_ptr's heap memory...\n");
        free(char_ptr);

        printf("\t[+]allocating another 15 bytes for char_ptr\n");
        char_ptr = (char*)malloc(15);

        if(char_ptr == NULL){
                fprintf(stderr,"Error:could not allocate heap memory.\n");
                exit(-1);
        }

        strcpy(char_ptr,"new memory");
        printf("char_ptr (%p)-->'%s'\n",char_ptr,char_ptr);

        printf("\t[-]freeing int_ptr's heap memory...\n");
        free(int_ptr);
        printf("\t[-]freeing char_ptr's heap memory...\n");
        free(char_ptr);
}

Однако, когда я набираю следующие инструкции, указанные в книге, в моем окне терминала:

reader@hacking:~/booksrc $ gcc -o heap_example heap_example.c

Это выдает следующее сообщение об ошибке синтаксических ошибок в моем stdlib.h

In file included from heap_example.c:2:
/usr/include/stdlib.h:469: error: syntax error before "int32_t"
/usr/include/stdlib.h:471: error: syntax error before '*' token
/usr/include/stdlib.h:475: error: syntax error before '*' token
/usr/include/stdlib.h:476: error: syntax error before '}' token
/usr/include/stdlib.h:479: error: syntax error before "int32_t"

Вот где ошибка, кажется, происходит в моем stdlib.h (строки 467 - 479)

struct random_data
    {
        int32_t *fptr;        /* Front pointer. */
        int32_t *rptr;        /* Rear pointer. */
        int32_t *state;       /* Array of state values. */
        int rand_type;        /* Type of random number generator. */
        int rand_deg;         /* Degree of random number generator. */
        int rand_sep;         /* Distance between front and rear. */
        int32_t *end_ptr;     /* Pointer behind state table. */
    };

extern int random_r (struct random_data *__restrict __buf,
                     int32_t *__restrict __result) __THROW __nonnull ((1, 2));

Затем, когда я пытаюсь запустить его:

reader@hacking:~/booksrc $ ./heap_example

Я получаю это:

bash: ./heap_example: No such file or directory

Я считаю, что heap_example.c - это первый файл в книге, который включает stdlib.h (все предыдущие примеры использовали только stdio.h, поэтому у меня не было проблем).

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

Спасибо!

0 ответов

Другие вопросы по тегам