Синтаксическая ошибка 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
Спасибо!