Подтвердить что ты не робот

Ошибка компиляции: отклонение '\ 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 и получить тот же результат.

4b9b3361

Ответ 1

У вас есть недопустимый символ в этой строке. Вот что я увидел:

enter image description here

Ответ 2

У вас есть недопустимые символы в вашем источнике. Если у вас нет допустимых символов ascii в вашем источнике, возможно, в строковом литерале с двойными кавычками, вы можете просто преобразовать свой файл обратно в ascii с помощью:

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

Изменить: метод с iconv остановится на неправильных символах, что не имеет смысла. Вышеупомянутая командная строка работает с файлом примера. Удачи: -)

Ответ 3

Я получил то же самое с символом, который явно появился как звездочка, но вместо этого был последовательностью 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 для ОПЕРАТОРА ASTERISK.

Удаление '*' и ввод его снова устранили проблему.

Ответ 4

Всякий раз, когда компилятор обнаруживает специальный символ, он дает эту ошибку компиляции королем.... какая ошибка, которую я нашел, выглядит следующим образом

error: stray '\ 302' в программе и ошибка: блуждание '\ 240' в программе

....

Некоторая часть кода, которую я скопировал из чата Messenger. В messanger это был особый характер. После того, как он перешел в редактор vim, он изменился только на правильный характер. Но компилятор выдавал выше ошибки.. тогда.. что stamenet я написал mannualy после.. он получил решение..:)

Ответ 5

Возможно, потому, что вы скопировали код из сети (с сайта, который, возможно, не был кодированной ASCII страницей, но зашифрованной страницей UTF-8), поэтому вы можете преобразовать код в ASCII с этого сайта:

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

Там вы можете либо обнаружить ошибки вручную, переведя его обратно в UTF-8, либо вы можете автоматически преобразовать его в ASCII и удалить все бродячие символы.

Ответ 6

Codo был точно прав 5 октября, что & current [i] является предполагаемым текстом (с символом валюты, непреднамеренно введенным, когда источник был помещен в HTML (см. оригинал): http://downloads.securityfocus.com/vulnerabilities/exploits/59846-1.c

Codo change делает этот код эксплойта компиляцией без ошибок. Я сделал это и смог использовать эксплойт на Ubuntu 12.04 для повышения привилегий root.

Ответ 7

Приведенные здесь объяснения верны. Я просто хотел добавить, что эта проблема может быть связана с тем, что вы скопировали код откуда-то, с веб-сайта или файла PDF, из-за чего в коде есть недопустимые символы.

Попробуйте найти эти недопустимые символы или просто введите код, если вы не можете. Он определенно скомпилируется.

Источник: ошибка при отклонениях

Ответ 8

Со мной эта ошибка возникла при копировании и вставке кода в текстовый формат в мой редактор (gedit). Код был в текстовом документе (.odt), и я скопировал его и вложил в gedit. Если вы сделали то же самое, вы вручную переписали код.

Ответ 9

Я заметил проблему с использованием вышеуказанной команды tr. Команда tr ПОЛНОСТЬЮ удаляет "умные кавычки. Было бы лучше заменить " умные кавычки" на что-то вроде этого.

Это даст вам быстрый предварительный просмотр того, что будет заменено.

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/

Ответ 10

Эта проблема возникает, когда вы скопировали какой-либо текст из html или сделали модификацию в среде Windows и пытаетесь скомпилировать ее в среде Unix/Solaris.

Пожалуйста, сделайте " dos2unix", чтобы удалить специальные символы из файла:

dos2unix fileName.ext fileName.ext

Ответ 11

Конечно, конвертируйте файл в ascii и удалите все символы Юникода. Это, вероятно, будет работать.... НО...

  1. Вы не будете знать, что вы исправили.
  2. Это также уничтожит любые комментарии Unicode. Пример://: A² +B ² = C²
  3. Это может потенциально повредить очевидную логику, код все равно будет взломан, но решение менее очевидно. Например: строка с "Smart-Quotes" ("&") или указатель с астриксой во всю ширину (*). Теперь "SOME_THING" выглядит как #define (SOME_THING), а SomeType - неправильный тип (SomeType).

Еще два суггестивных подхода к решению проблемы:

  1. Переключите шрифты, чтобы увидеть персонажа. (Это может быть невидимым в вашем текущем шрифте)
  2. Регулярный поиск всех символов Юникода, не являющихся частью нерасширенного ascii. В notepad++ я могу искать до FFFF, который еще не подвел меня.

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

    80 - это шестнадцатеричное для 128, первый расширенный символ ascii

    После нажатия "найти далее" и выделения того, что кажется пустым пространством, вы можете закрыть диалоговое окно поиска и нажать CTRL + C, чтобы скопировать в буфер обмена.

    Затем вставьте символ в инструмент поиска Unicode. Я обычно использую онлайн. http://unicode.scarfboy.com/

Пример: у меня в коде была точка (•) как-то. Значение Юникода равно 2022 (шестнадцатеричное), но при чтении компилятором как ascii вы получаете \342\200\242 (3 восьмеричных значения). Это не так просто, как преобразование каждого восьмеричного значения в шестнадцатеричное и сложение их вместе. Таким образом, "E2 80 A2" НЕ является шестнадцатеричной точкой Unicode в вашем коде.

Ответ 12

Я попытался скомпилировать их как на Kali Linux, так и на Ubuntu 10.04 и получить тот же результат.

Я попытался скомпилировать их как на Kali Linux, так и на Ubuntu 10.04 и получить тот же результат.

Я попытался скомпилировать их как на Kali Linux, так и на Ubuntu 10.04 и получить тот же результат.

Ответ 13

Неверный символ в вашем коде. Распространенная ошибка копирования-вставки, особенно когда код копируется из документов Word или файлов PDF.

Ответ 14

Измените имя файла file.c на другой файл423.c. это может быть из-за конфликта имен между c файлами.