Jump to content

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

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

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

Данные, которые жестко закодированы, лучше всего подходят для неизменяемых фрагментов информации, таких как физические константы , номера версий и статические текстовые элементы.

Данные с программным кодированием, с другой стороны, кодируют произвольную информацию посредством пользовательского ввода , текстовых файлов , файлов INI , ответов HTTP-сервера, файлов конфигурации, макросов препроцессора, внешних констант, баз данных, аргументов командной строки и определяются во время выполнения.

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

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

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

Хардкодинг и бэкдоры

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

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

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

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

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

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

Исправлен путь установки

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

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

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

Загрузочный диск

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программное кодирование

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

Программное кодирование — это термин компьютерного кодирования , который относится к получению значения или функции из некоторого внешнего ресурса, такого как текстовые файлы , файлы INI , препроцессора макросы , внешние константы, файлы конфигурации , аргументы командной строки , базы данных, пользовательский ввод, ответы HTTP-сервера. Это противоположность жесткому кодированию , которое относится к кодированию значений и функций в исходном коде.

Практика программирования

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

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

Этот термин обычно используется там, где программное кодирование становится антишаблоном . Абстрагирование слишком большого количества значений и функций может привести к большей сложности и проблемам обслуживания, чем при изменении кода, когда это необходимо. Софткодинг в этом смысле был рассмотрен в статье на The Daily WTF . [3]

Потенциальные проблемы

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

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

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

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

Достижение гибкости

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

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

См. также

[ редактировать ]
  1. ^ Эльфрида Дастин (2002). Эффективное тестирование программного обеспечения: 50 конкретных способов улучшить тестирование . Аддисон-Уэсли Профессионал. стр. 188–. ISBN  978-0-201-79429-8 .
  2. ^ Таня Янка (14 октября 2020 г.). Алиса и Боб изучают безопасность приложений . Уайли. стр. 15–. ISBN  978-1-119-68740-5 .
  3. ^ Программное кодирование от The Daily WTF
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d0f045357067de8b8a2ba02c0dbd2776__1721125680
URL1:https://arc.ask3.ru/arc/aa/d0/76/d0f045357067de8b8a2ba02c0dbd2776.html
Заголовок, (Title) документа по адресу, URL1:
Hard coding - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)