Ввод не ASCII символов в scanf("%s")
Есть ли способ, которым можно выдавать не ascii шестнадцатеричные символы для scanf, который использует %s
? Я пытаюсь вставить шестнадцатеричные символы, такие как \x08\xDE\xAD
и так далее (для демонстрации переполнения буфера).
Входные данные не для параметра командной строки, но для scanf внутри программы.
2 ответа
Я предполагаю, что вы хотите передать произвольные данные на стандартный ввод (так как вы читаете с scanf
).
Вы можете использовать оболочку для создания данных и передачи их в вашу программу, например
printf '\x08\xDE\xAD' | yourprogram
Обратите внимание, что это будет работать только до тех пор, пока нет символов пробела для подачи (потому что scanf
с %s
формат останавливается на пустом месте).
Когда вы говорите scanf()
', по-видимому, есть и другие данные, помимо этого, которые будут предоставлены. Будет ли работать иметь программу, возможно, скрипт на Perl или Python, генерировать данные и записывать символы, не входящие в ASCII, на стандартный ввод вашей программы? Если вам нужен стандартный ввод, чтобы он выглядел как терминал, то вам нужно исследовать expect
который обрабатывает это для вас. Это распространенный способ решения проблемы.