Жесткое кодирование

редактировать

Жесткое кодирование (также жесткое кодирование или жесткое кодирование ) практика разработки программного обеспечения, заключающаяся в встраивании данных непосредственно в исходный код программы программы или другого исполняемого объекта, в отличие от получения данных из внешних источников или их генерации во время выполнения. Жестко закодированные данные обычно можно изменить только путем редактирования исходного кода и перекомпиляции исполняемого файла, хотя их можно изменить в памяти или на диске с помощью отладчика или. Жестко запрограммированные данные обычно представляют собой неизменные части информации, такие как физические константы, номера версий и статические текстовые элементы. Данные с программным кодированием, с другой стороны, кодируют произвольную информацию, такую ​​как вводимые пользователем, ответы HTTP-сервера или файлы конфигурации, и определяются во время выполнения.

Содержание

  • 1 Обзор
  • 2 Жесткое кодирование и бэкдоры
  • 3 Жесткое кодирование и DRM
  • 4 Фиксированный путь установки
  • 5 Загрузочный диск
  • 6 Специальные папки
    • 6.1 Путь к профилю
    • 6.2 Путь к папке «Мои документы»
  • 7 Решение
  • 8 Жесткое кодирование в соревнованиях

Обзор

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

Часто требуется жесткое кодирование, но его также можно рассматривать как антишаблон. У программистов может не быть разработанного решения динамического пользовательского интерфейса для конечного пользователя, но они все равно должны предоставить функцию или выпустить программу. Обычно это временно, но в краткосрочном плане снимает необходимость предоставить код. Позже выполняется мягкое кодирование, позволяющее пользователю передавать параметры, которые дают конечному пользователю способ изменить результаты или результат.

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

Hardcoding и backdoors

Hardcoding credentials - популярный способ создания backdoor. Жестко закодированные учетные данные обычно не видны в файлах конфигурации или в выводе команд перечисления учетных записей и не могут быть легко изменены или обойдены пользователями. В случае обнаружения пользователь сможет отключить такой бэкдор, изменив и перестроив программу из ее исходного кода (, если исходный код общедоступен или с обратной разработкой ), двоичный файл программы код или введение проверки целостности (например, цифровые подписи, защита от взлома и защита от мошенничества ) для предотвращения неожиданного доступа, но такие действия часто запрещены EULA.

Hardcoding и DRM

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

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

Фиксированный путь установки

Если программа Windows запрограммирована так, что она всегда устанавливается в C: \ Program Files \ Appname, и кто-то пытается установить ее на другой диск из-за недостатка места или по организационным причинам, он может не устанавливаться или запускаться после установки. Эта проблема может быть не выявлена ​​в процессе тестирования, поскольку средний пользователь устанавливает на диск и в каталог по умолчанию, а тестирование может не включать возможность изменения каталога установки. Однако программистам и разработчикам рекомендуется не исправлять путь установки программы, поскольку путь установки по умолчанию зависит от операционной системы, версии ОС и решений sysadmin. Например, во многих установках Microsoft Windows в качестве основного жесткого диска используется диск C:, но это не гарантируется.

Аналогичная проблема была с микропроцессорами на ранних компьютерах, которые начинали выполнение с фиксированного адреса в памяти.

Загрузочная дискета

Некоторые «защищенные от копирования» программы при запуске ищут определенный файл на гибком диске или флэш-накопителе, чтобы убедиться, что они не являются неавторизованными копиями. Если компьютер заменен на более новую машину, у которой нет дисковода для гибких дисков, программа, которая требует его сейчас, не может быть запущена, так как дискета не может быть вставлена.

Этот последний пример показывает, почему жесткое кодирование может оказаться непрактичным, даже если в то время казалось, что оно будет работать полностью. В 1980-х и 1990-х годах подавляющее большинство ПК было оснащено по крайней мере одним дисководом для гибких дисков, но позже они вышли из употребления. Программа, жестко запрограммированная таким образом 15 лет назад, может столкнуться с проблемами, если ее не обновить.

Специальные папки

В некоторых операционных системах Windows есть так называемые специальные папки, которые логически организуют файлы на жестком диске. Могут возникнуть проблемы, связанные с жестким кодированием:

Путь к профилю

Некоторые программы Windows жестко кодируют путь профиля к определенным разработчиком расположениям, таким как C: \ Documents and Settings \ Username. Это путь для подавляющего большинства Windows 2000 или более поздних версий, но это может вызвать ошибку, если профиль сохраняется в сети или перемещается иным образом. Правильный способ получить это - вызвать функцию GetUserProfileDirectoryили разрешить переменную среды % userprofile%. Еще одно предположение, которое часто делают разработчики, - это предположение, что профиль расположен на локальном жестком диске.

Путь к папке «Мои документы»

Некоторые программы Windows жестко кодируют путь к Мои документы как ProfilePath \ My Documents. Эти программы будут работать на машинах с английской версией, но в локализованных версиях Windows эта папка обычно имеет другое имя. Например, в итальянской версии папка Мои документыназывается Documenti. Мои документытакже могли быть перемещены с помощью перенаправления папок в групповой политике в Windows 2000 или выше. Правильный способ получить его - вызвать функцию SHGetFolderPath.

Решение

Косвенная ссылка, такая как переменная внутри программы с именем «FileName», может быть расширена путем доступа к диалоговому окну «Обзор файла», и программный код не будет иметь будет изменен, если файл переместился.

Жесткое кодирование особенно проблематично при подготовке программного обеспечения к переводу на другие языки.

Во многих случаях одно жестко запрограммированное значение, например размер массива, может встречаться несколько раз в исходном коде программы. Это будет магическое число. Обычно это может вызвать программную ошибку, если изменяются некоторые представления значения, но не все. Такую ошибку сложно найти и она может оставаться в программе долгое время. Аналогичная проблема может возникнуть, если одно и то же жестко запрограммированное значение используется для более чем одного значения параметра, например массив из 6 элементов и минимальная длина входной строки 6. Программист может по ошибке изменить все экземпляры значения (часто используя функцию поиска и замены редактора), не проверяя код, чтобы увидеть, как каждый экземпляр используется. Обе ситуации можно избежать путем определения констант, которые связывают имена со значениями, и использования имен констант для каждого появления в коде.

Одним из важных случаев жесткого кодирования является то, что строки помещаются непосредственно в файл, что заставляет переводчиков редактировать исходный код для перевода программы. (Существует инструмент под названием gettext , который позволяет оставлять строки в файлах, но позволяет переводчикам переводить их без изменения исходного кода; он эффективно де-жестко кодирует строки.)

Жесткое программирование в соревнованиях

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

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

Последняя правка сделана 2021-05-22 13:30:30
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте