2017-06-19 2 views
2

zu kompilieren Ich kann nicht für das Leben von mir diesen alten Code kompilieren. Ich versuche, externe Schwachstellen für einen Client zu testen. Ich habe es in FreeBSD 11 laufen und kompilieren mit gcc. Irgendeine Idee, warum ich diesen Fehler bekomme? hiernicht in der Lage, ecepass.c

int in_cksum(u_short *addr, int len) 
{ 
    int sum; 
    int nleft; 
    u_short ans; 
    u_short *w; 

    sum = 0; 
    ans = 0; 
    nleft = len; 
    w = addr; 

    while (nleft > 1) { 
     sum += *w++; 
     nleft -= 2; 
    } 
    if (nleft == 1) { 
     *(u_char *)(&ans) = *(u_char *)w; 
     sum += ans; 
    } 
    return (sum); 
} 

Voll Code: https://pastebin.com/MGSYycmB

Fehler:

In file included from ecepass.c:8:0: ecepass.c:72:5: error: expected declaration specifiers or '...' before numeric constant int in_cksum(u_short *addr, int len)

+0

Ich glaube, Sie vergessen, etwas zu erwähnen ... Witze – Stargateur

+0

@Stargateur Haben Sie sich die vollständige Quelle angesehen? Er enthält praktisch * alles * :) – Barmar

+0

Und er ist ein paar von ihnen zweimal enthalten. – Barmar

Antwort

5

Im Code auf Pastebin veröffentlicht, in Zeile # 8 (und # 24: d) gibt es die Aussage: #include <machine/in_cksum.h>

Da ich nicht auf Ux bin, habe ich gesucht, die Datei auf Internet und fanden 2 Referenzen:

In den beiden von ihnen (um Zeile # 40+), scheint wie in_cksum ein Makro-Präprozessor ist:

#define in_cksum(m, len)  in_cksum_skip(m, len, 0) 

Ändern Sie den Namen Ihrer Funktion (und alle Stellen in Ihrem Code, die auf sie verweisen) in etwas, das kein Makro oder ein anderer definierter Bezeichner ist, z. checksum (hoffentlich ist es nicht schon definiert :)), und Sie sollten in Ordnung sein (könnte auch für andere Ihrer Funktionen gelten).
Oder als Alternative, entfernen Sie die machine/in_cksum.h Aufnahme (direkt und indirekt (über andere verschachtelte Includes)), aber das könnte ein bisschen schwieriger werden (auch, ich habe nicht den gesamten Code überprüft um zu sehen, ob andere Funktionen aus dem Include verwendet werden).

+0

Dies erlaubt es zu kompilieren. Sehr geschätzt. – sethh

+0

Ich hatte die Details nicht ganz richtig, aber "einer der System-Header definiert in_cksum als Präprozessor-Makro" war mein schrecklicher Verdacht. Viele BSD-spezifische netzwerkbezogene Header wurden nicht im Hinblick auf die Sauberkeit des Namensraums geschrieben. – zwol

+0

@sethh: Gern geschehen :) – CristiFati