Ввод не ASCII символов в scanf("%s")

Есть ли способ, которым можно выдавать не ascii шестнадцатеричные символы для scanf, который использует %s? Я пытаюсь вставить шестнадцатеричные символы, такие как \x08\xDE\xAD и так далее (для демонстрации переполнения буфера).

Входные данные не для параметра командной строки, но для scanf внутри программы.

2 ответа

Я предполагаю, что вы хотите передать произвольные данные на стандартный ввод (так как вы читаете с scanf).

Вы можете использовать оболочку для создания данных и передачи их в вашу программу, например

printf '\x08\xDE\xAD' | yourprogram

Обратите внимание, что это будет работать только до тех пор, пока нет символов пробела для подачи (потому что scanf с %s формат останавливается на пустом месте).

Когда вы говорите scanf() ', по-видимому, есть и другие данные, помимо этого, которые будут предоставлены. Будет ли работать иметь программу, возможно, скрипт на Perl или Python, генерировать данные и записывать символы, не входящие в ASCII, на стандартный ввод вашей программы? Если вам нужен стандартный ввод, чтобы он выглядел как терминал, то вам нужно исследовать expect который обрабатывает это для вас. Это распространенный способ решения проблемы.

Другие вопросы по тегам