Ответ 1
У вас есть недопустимый символ в этой строке. Вот что я увидел:
У меня возникла проблема с компиляцией следующего кода эксплойта:
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 и получить тот же результат.
У вас есть недопустимый символ в этой строке. Вот что я увидел:
У вас есть недопустимые символы в вашем источнике. Если у вас нет допустимых символов ascii в вашем источнике, возможно, в строковом литерале с двойными кавычками, вы можете просто преобразовать свой файл обратно в ascii с помощью:
tr -cd '\11\12\15\40-\176' < old.c > new.c
Изменить: метод с iconv остановится на неправильных символах, что не имеет смысла. Вышеупомянутая командная строка работает с файлом примера. Удачи: -)
Я получил то же самое с символом, который явно появился как звездочка, но вместо этого был последовательностью 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.
Удаление '*' и ввод его снова устранили проблему.
Всякий раз, когда компилятор обнаруживает специальный символ, он дает эту ошибку компиляции королем.... какая ошибка, которую я нашел, выглядит следующим образом
error: stray '\ 302' в программе и ошибка: блуждание '\ 240' в программе
....
Некоторая часть кода, которую я скопировал из чата Messenger. В messanger это был особый характер. После того, как он перешел в редактор vim, он изменился только на правильный характер. Но компилятор выдавал выше ошибки.. тогда.. что stamenet я написал mannualy после.. он получил решение..:)
Возможно, потому, что вы скопировали код из сети (с сайта, который, возможно, не был кодированной ASCII страницей, но зашифрованной страницей UTF-8), поэтому вы можете преобразовать код в ASCII с этого сайта:
" http://www.percederberg.net/tools/text_converter.html"
Там вы можете либо обнаружить ошибки вручную, переведя его обратно в UTF-8, либо вы можете автоматически преобразовать его в ASCII и удалить все бродячие символы.
Codo был точно прав 5 октября, что & current [i] является предполагаемым текстом (с символом валюты, непреднамеренно введенным, когда источник был помещен в HTML (см. оригинал): http://downloads.securityfocus.com/vulnerabilities/exploits/59846-1.c
Codo change делает этот код эксплойта компиляцией без ошибок. Я сделал это и смог использовать эксплойт на Ubuntu 12.04 для повышения привилегий root.
Приведенные здесь объяснения верны. Я просто хотел добавить, что эта проблема может быть связана с тем, что вы скопировали код откуда-то, с веб-сайта или файла PDF, из-за чего в коде есть недопустимые символы.
Попробуйте найти эти недопустимые символы или просто введите код, если вы не можете. Он определенно скомпилируется.
Источник: ошибка при отклонениях
Со мной эта ошибка возникла при копировании и вставке кода в текстовый формат в мой редактор (gedit). Код был в текстовом документе (.odt), и я скопировал его и вложил в gedit. Если вы сделали то же самое, вы вручную переписали код.
Я заметил проблему с использованием вышеуказанной команды 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/
Эта проблема возникает, когда вы скопировали какой-либо текст из html или сделали модификацию в среде Windows и пытаетесь скомпилировать ее в среде Unix/Solaris.
Пожалуйста, сделайте " dos2unix", чтобы удалить специальные символы из файла:
dos2unix fileName.ext fileName.ext
Конечно, конвертируйте файл в ascii и удалите все символы Юникода. Это, вероятно, будет работать.... НО...
Еще два суггестивных подхода к решению проблемы:
Регулярный поиск всех символов Юникода, не являющихся частью нерасширенного 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 в вашем коде.
Я попытался скомпилировать их как на Kali Linux, так и на Ubuntu 10.04 и получить тот же результат.
Я попытался скомпилировать их как на Kali Linux, так и на Ubuntu 10.04 и получить тот же результат.
Я попытался скомпилировать их как на Kali Linux, так и на Ubuntu 10.04 и получить тот же результат.
Неверный символ в вашем коде. Распространенная ошибка копирования-вставки, особенно когда код копируется из документов Word или файлов PDF.
Измените имя файла file.c на другой файл423.c. это может быть из-за конфликта имен между c файлами.