web-dev-qa-db-ja.com

コンパイルエラー:プログラムなどで「\ 302」が漂う

次のエクスプロイトコードのコンパイルに問題があります。

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

私は「gcc file.c」と「gcc -O2 file.c」を使用していますが、どちらも次のエラーを受け取ります。

 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.)

Kali linuxとUbuntu 10.04の両方でコンパイルしてみたところ、同じ結果が得られました。

30
Ahmed Taher

その行に無効な文字があります。これは私が見たものです:

enter image description here

23
Yu Hao

ソースに無効な文字が含まれています。ソースに有効な非ASCII文字が含まれていない場合、おそらく二重引用符で囲まれた文字列リテラルにある場合は、次の方法でファイルを単にASCIIに戻すことができます。

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

編集:iconvを使用したメソッドは間違った文字で停止するため、意味がありません。上記のコマンドラインは、サンプルファイルを使用しています。幸運を :-)

14
Klaus

アスタリスクとして見える文字で同じようになりましたが、代わりにUTF-8シーケンスでした。

Encoder * st;

コンパイルが返されたとき:

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は、アスタリスク演算子のUTF-8であることがわかりました。

「*」を削除してもう一度入力すると、問題が修正されました。

2
TheMagicCow

おそらく、ネットからコードをコピーした(おそらく、ASCIIエンコードされたページではなく、UTF-8エンコードされたページ)サイトから)したため、コードをASCII:

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

そこで、エラーをUTF-8に変換して手動でエラーを検出するか、自動的にASCIIに変換してすべての浮遊文字を削除することができます。

1
Agrim Gupta

コンパイラが特別な文字を見つけたときはいつでも、これらのキングのコンパイルエラーを与えます....私が見つけたエラーは次のとおりです

エラー:プログラム内の浮遊 '\ 302'およびエラー:プログラム内の浮遊 '\ 240'

....

チャットメッセンジャーからコピーしたコードの一部。メッセンジャーでは、特殊文字のみでした.. vimエディターにコピーした後、正しい文字のみに変更されました。しかし、コンパイラは上記のエラーを与えていました.....解決した後、私は手作業で書いたstamenet .. :)

1
visu

ここでの説明は正しいです。コードに無効な文字が含まれているため、どこか、Webサイトまたはpdfファイルからコードをコピーしたことが原因である可能性があることを付け加えました。

無効な文字を見つけるか、できない場合はコードを再入力してください。それは間違いなくコンパイルされます。

ソース: 迷走エラーの理由

0
ravi

Codoは10月5日に&current [i]が意図されたテキストであると正確に言いました(ソースがHTMLに挿入されたときに通貨記号が誤って導入されました(元を参照): http://downloads.securityfocus.com/脆弱性/エクスプロイト/59846-1.c

Codoの変更により、このエクスプロイトコードはエラーなしでコンパイルされます。私はそれを行い、Ubuntu 12.04のエクスプロイトを使用してルート権限にエスカレートすることができました。

0
Eeyore

この問題は、htmlからテキストをコピーしたとき、またはWindows環境で変更を行ってUnix/Solaris環境でコンパイルしようとしたときに発生します。

dos2unix」を実行して、ファイルから特殊文字を削除してください。

dos2unix fileName.ext fileName.ext

0
Saifu Khan

コード上の無効な文字。 Word文書またはPDFファイルからコードがコピーされる場合の特別な一般的なコピーペーストエラー。

0
Victor Mwenda

上記のtrコマンドの使用に問題があることに気付きました。 trコマンド[〜#〜] completely [〜#〜]は、 "smart quotes" "smart quotes"をこのようなものに置き換えるとよいでしょう。

これにより、置き換えられるもののプレビューが表示されます。

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

これにより置換が行われ、WithoutSmartQuotes.txtという新しいファイルに置換が行われます。

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

これにより、元のファイルが上書きされます。

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

確かに、ファイルをASCIIに変換し、すべてのユニコード文字を吹き飛ばしてください。 それはおそらく動作します....しかし...

  1. 何を修正したかわかりません。
  2. また、Unicodeコメントを破棄します。例://:A²+B²=C²
  3. 明らかなロジックに潜在的な損傷を与える可能性がありますが、コードは引き続き破損しますが、解決策はそれほど明白ではありません。例:「Smart-Quotes」(「&」)を含む文字列、または全角のastrix(*)を含むポインター。現在、「SOME_THING」は#define(SOME_THING)のように見え、* SomeTypeは間違ったタイプ(SomeType)です。

問題を解決するためのさらに2つのアプローチ:

  1. フォントを切り替えて文字を表示します。 (現在のフォントでは見えない場合があります)
  2. 正規表現は、非拡張ASCIIの一部ではないすべてのUnicode文字を検索します。 notepad ++では、FFFFまで検索できますが、まだ失敗していません。

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

    80は128、最初の拡張ASCII文字の16進数です。

    [次を検索]を押して、空のスペースのように見えるものを強調表示したら、検索ダイアログを閉じて、Ctrl + Cキーを押してクリップボードにコピーできます。

    次に、文字をユニコード検索ツールに貼り付けます。私は通常オンラインのものを使用します。 http://unicode.scarfboy.com/

例:コードに何らかの形で箇条書き(•)がありました。 Unicode値は2022(16進数)ですが、コンパイラーによってASCIIとして読み取られた場合、\ 342\200\242(3つの8進数値)を取得します。各8進数値を16進数に変換し、それらを一緒に壊すほど単純ではありません。したがって、「E2 80 A2」はコード内の16進Unicodeポイントではありません。

0
J.M.I. MADISON

私と一緒にテキスト形式のコードをエディター(gedit)にコピーして貼り付けると、このエラーが発生しました。コードはテキストドキュメント(.odt)にあり、コピーしてgeditに貼り付けました。同じことをした場合は、コードを手動で書き直しています。

0
Lukasavicus