web-dev-qa-db-fra.com

Erreur de compilation: "302" errant dans le programme, etc.

J'ai des problèmes pour compiler le code d'exploitation suivi:

http://downloads.securityfocus.com/vulnerabilities/exploits/59846-1.c

J'utilise: "gcc file.c" et "gcc -O2 file.c" mais les deux erreurs suivantes sont générées:

 sorbolinux-exec.c: In function ‘sc’:
 sorbolinux-exec.c:76: error: stray ‘\302’ in program
 sorbolinux-exec.c:76: error: stray ‘\244’ in program
 sorbolinux-exec.c:76: error: ‘t’ undeclared (first use in this function)
 sorbolinux-exec.c:76: error: (Each undeclared identifier is reported only  once
 sorbolinux-exec.c:76: error: for each function it appears in.)

J'ai essayé de les compiler à la fois sur Kali Linux et Ubuntu 10.04 et d'obtenir le même résultat.

30
Ahmed Taher

Vous avez un caractère invalide sur cette ligne. Voici ce que j'ai vu:

enter image description here

23
Yu Hao

Vous avez des caractères invalides dans votre source. Si vous n'avez aucun caractère valide non ascii dans votre source, peut-être dans un littéral de chaîne entre guillemets doubles, vous pouvez simplement reconvertir votre fichier en ascii avec:

tr -cd '\11\12\15\40-\176' < old.c > new.c

Edit: la méthode avec iconv s'arrête sur des caractères incorrects, ce qui n'a aucun sens. La ligne de commande ci-dessus fonctionne avec le fichier exemple. Bonne chance :-)

14
Klaus

J'ai eu la même chose avec un personnage qui apparaissait visiblement sous la forme d'un astérisque, mais qui était plutôt une séquence UTF-8.

Encoder * st;

Une fois compilé retourné:

g.c:2:1: error: stray ‘\342’ in program
g.c:2:1: error: stray ‘\210’ in program
g.c:2:1: error: stray ‘\227’ in program

342 210 227 s'avère être UTF-8 pour ASTERISK OPERATOR.

Supprimer le '*' et le retaper à nouveau a résolu le problème.

2
TheMagicCow

C'est peut-être parce que vous avez copié le code de net (d'un site qui n'a peut-être pas une page codée ASCII, mais une page codée UTF-8), de sorte que vous pouvez convertir le code en ASCII à partir de ce site :

" http://www.percederberg.net/tools/text_converter.html "

Vous pouvez alors détecter les erreurs manuellement en le reconvertissant au format UTF-8 ou le convertir automatiquement en ASCII et supprimer tous les caractères parasites.

1
Agrim Gupta

Chaque fois que le compilateur a trouvé un caractère spécial .. il donne à ces roi d'erreur de compilation .... quelle erreur j'ai trouvé est comme suit

error: stray '\ 302' dans le programme et error: stray '\ 240' dans le programme

....

Un morceau de code que j'ai copié à partir de messagerie instantanée. Dans messanger, c’était un caractère spécial uniquement. Après avoir été copié dans l’éditeur vim, il ne changeait plus que le caractère. Mais le compilateur donnait l'erreur ci-dessus .. alors .. que stamenet j'ai écrit mannualy après .. il a résolu .. :)

1
visu

Les explications données ici sont correctes. Je voulais juste ajouter que ce problème peut être dû au fait que vous avez copié le code quelque part, à partir d'un site Web ou d'un fichier PDF, à cause de la présence de caractères non valides dans le code.

Essayez de trouver ces caractères non valides, ou retapez simplement le code si vous ne le pouvez pas. Il va certainement compiler alors.

Source: motif d'erreur parasite

0
ravi

Le 5 octobre, Codo avait parfaitement raison de dire que & current [i] est le texte souhaité (avec le symbole monétaire introduit par inadvertance lorsque la source a été mise en HTML (voir l'original): http://downloads.securityfocus.com/ vulnérabilités/exploits/59846-1.c

La modification de Codo rend ce code d'exploitation compilable sans erreur. Je l'ai fait et j'ai pu utiliser l'exploit sur Ubuntu 12.04 pour passer au privilège root.

0
Eeyore

Ce problème survient lorsque vous avez copié du texte à partir de HTML ou que vous avez modifié l’environnement Windows et essayé de le compiler dans l’environnement Unix/Solaris.

Veuillez faire "dos2unix" pour supprimer les caractères spéciaux du fichier:

dos2unix nomFichier.ext nomFichier.ext

0
Saifu Khan

caractère invalide sur votre code. Une erreur courante de copier-coller, spécialement lorsque le code est copié à partir de documents Word ou de fichiers PDF.

0
Victor Mwenda

J'ai remarqué un problème dans l'utilisation de la commande ci-dessus tr. La commande tr [~ # ~] complètement [~ # ~] supprime les "citations intelligentes" . Il serait préférable de remplacer les "citations intelligentes" par quelque chose comme ceci.

Cela vous donnera un aperçu rapide de ce qui sera remplacé.

sed s/[”“]/'"'/g File.txt

Cela fera les remplacements et mettra le remplacement dans un nouveau fichier appelé WithoutSmartQuotes.txt.

sed s/[”“]/'"'/g File.txt > WithoutSmartQuotes.txt

Cela écrasera le fichier d'origine.

sed -i ".bk" s/[”“]/'"'/g File.txt

http://developmentality.wordpress.com/2010/10/11/how-to-remove-smart-quotes-from-a-text-file/

0
cokedude

Bien sûr, convertissez le fichier en ascii et supprimez tous les caractères Unicode. Cela fonctionnera probablement .... MAIS ...

  1. Vous ne saurez pas ce que vous avez corrigé.
  2. Cela détruira également tous les commentaires unicode. Ex: //: A² + B² = C²
  3. Cela pourrait potentiellement endommager la logique évidente, le code sera toujours cassé, mais la solution moins évidente. Par exemple: Une chaîne avec "Smart-Quotes" ("&") ou un pointeur avec une largeur astrix (). Maintenant, “SOME_THING” ressemble à un #define (SOME_THING) et * SomeType est du type incorrect (SomeType).

Deux approches supplémentaires pour résoudre le problème:

  1. Changez de police pour voir le caractère. (Il pourrait être invisible dans votre police actuelle)
  2. Regex recherche tous les caractères unicode ne faisant pas partie d'une ascii non étendue. Dans Notepad ++, je peux rechercher jusqu'à FFFF, qui ne m'a pas encore échoué.

    [\ x {80} -\x {FFFF}]

    80 est hexadécimal pour 128, le premier caractère ASCII étendu.

    Après avoir cliqué sur "Rechercher suivant" et mis en surbrillance ce qui semble être un espace vide, vous pouvez fermer votre boîte de dialogue de recherche et appuyer sur CTRL + C pour copier dans le presse-papier.

    Collez ensuite le caractère dans un outil de recherche Unicode. J'utilise habituellement un en ligne. http://unicode.scarfboy.com/

Exemple: j'ai eu un point de balle (•) dans mon code en quelque sorte. La valeur unicode est 2022 (hex), mais quand il est lu en tant qu'ascii par le compilateur, vous obtenez\342\200\242 (3 valeurs octales). Ce n'est pas aussi simple que de convertir chaque valeur octale en hex et de les briser ensemble. Donc, "E2 80 A2" n'est PAS le point Unicode hexadécimal de votre code.

0
J.M.I. MADISON

Avec moi, cette erreur s'est produite lorsque j'ai copié et collé un code au format texte dans mon éditeur (gedit). Le code était dans un document texte (.odt) et je l'ai copié et collé dans gedit. Si vous avez fait la même chose, vous avez réécrit manuellement le code.

0
Lukasavicus