После нескольких поисков различных поисковых запросов, таких как «отключить расширение файла bash» и т. п., я нашел его, выполнив поиск для "bash" "windows" taskkill
исполняемого файла, который я пытался запустить, я наткнулся на этот ответ , который, наконец, работал для меня.
cmd " /c taskkill /F /IM ssh-agent.exe"
Вам не нужно беспокоиться об именах файлов, содержащих нулевые байты в Unixes и Windows, потому что они не могут.
Однако имена файлов, которые обрабатываются как UTF-8, могут указывать символ NUL (U + 0000) с использованием недопустимых «чрезмерно длинных» последовательностей: двух, трех или четырехбайтовых последовательностей UTF-8, которые имеют все нули в своих биты полезной нагрузки кодовой точки.
Это может быть проблемой безопасности. Например, декодер UTF-8, который не проверяет это, может в конечном итоге генерировать значение символа wchar_t
, равное 0, которое затем неожиданно завершает строку широких символов.
Например, последовательность байтов C0 80 является слишком длинным кодированием для NUL. Это, очевидно, используется неким thign, называемым «Modified UTF-8», специально для целей кодирования символов NUL, которые не заканчивают строку C, используемую для хранения UTF-8.
Если вы проводите тестирование безопасности, это актуально; Вы можете проверить, восприимчивы ли программы к введению символов NUL (и других) через слишком длинные кодировки.
Невозможно создать имя файла, содержащее нулевой байт, через API POSIX или Windows. На всех известных мне Unix-системах невозможно создать имя файла, содержащее нулевой байт, даже с помощью приложения с плохим поведением, которое обходит нормальный API, потому что само ядро обрабатывает все свои входные данные имени файла как нулевые. строки Я верю, что это верно и для Windows, но я не совсем уверен.
Как прикладной программист, с точки зрения безопасности это означает, что вам не нужно беспокоиться об имени файла, содержащем нулевые байты, если вы уверены, что у вас есть имя файла. С другой стороны, если вам дали строку и сказали использовать ее в качестве имени файла, например, если вы программируете сервер и позволяете клиенту выбирать имена файлов, вам нужно убедиться, что эта строка не содержит ноль байт. Это всего лишь одно требование среди прочих, включая длину строки, наличие разделителя каталогов (/
или \
), зарезервированные имена (.
и ..
, зарезервированные имена файлов Windows, такие как nul.txt
или prn
]) и т. д. В большинстве систем Unix в их собственной файловой системе существуют ограничения для имени файла: нулевой байт или косая черта, длина от 1 до некоторого максимума и два имени .
и ..
зарезервированы. Windows и не родные файловые системы в Unix имеют дополнительные ограничения (можно поставить /
в имени файла через прямые обращения к ядру в Windows).
Чтобы поместить нулевой байт в содержимое файла, просто запишите строку в файл, используя любой язык, который допускает нулевые байты в строках. В bash вы не можете хранить нулевой байт в строке, поэтому вам нужно использовать другой метод, такой как printf '\0'
или echo "abc" | tr b '\0'
.