硬编码
将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同
硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同。 硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,尽管可以使用调试器或十六进制编辑器在内存或磁盘上进行更改。 硬编码的数据通常表示不变的信息,例如物理常量,版本号和静态文本元素。 另一方面,软编码数据对用户输入,HTTP服务器响应或配置文件等任意信息进行编码,并在运行时确定。
介绍
硬编码要求程序的源代码在输入数据或所需格式发生变化时进行更改,以便最终用户可以通过程序外的某种方式更改细节。
硬编码通常是必需的,但也可以被认为是反模式。程序员可能没有针对最终用户制定的动态用户界面解决方案,但仍然必须提供该功能或发布该程序。这通常是暂时的,但从短期来看,确实解决了交付代码的压力。稍后,进行软编码以允许用户传递参数,该参数为最终用户提供修改结果或结果的方式。
术语“硬编码”最初被用作硬连线电路的类比,并且意在表达软件设计和实现中使用它所产生的不灵活性。在诸如MUD之类的运行时可扩展协作开发环境的上下文中,硬编码还指开发负责低级任务和执行脚本的系统的核心引擎,而不是开发高级脚本的软编码。系统在运行时解释。在这种情况下,这个术语不是贬义的,而是指一般的发展,而不是专门嵌入输出数据。
硬编码和后门
硬编码凭证是创建后门的一种流行方式。硬编码凭证通常在配置文件和帐户枚举命令输出中不可见,并且无法轻松更改(无需从源重建,如果源可用或逆向工程,二进制修改和完整性检查(数字签名,防篡改)和反作弊)旁路(可以通过EULA禁止)。
硬编码和DRM
作为一项数字版权管理措施,软件开发商可能会将一个序列号硬编码到一个程序中。或者硬编码一个公共密钥是常见的,创建一个不可行的DRM来创建一个keygen。
在相反的情况下,软件破解者可能会将有效的序列号硬编码到程序中,甚至阻止可执行文件询问用户,从而允许未经授权的副本被重新分发而不需要输入有效的号码,从而共享相同的每个副本的密钥,如果已经硬编码。
修复安装路径。
早期计算机中的微处理器存在类似的问题,它开始在内存中的固定地址执行。
启动磁盘
某些“复制保护”程序在启动时在软盘或闪存驱动器上查找特定文件,以验证它们不是未经授权的副本。 如果计算机被没有软盘驱动器的较新计算机所取代,无法运行需要它的程序,因为软盘无法插入。
最后一个例子说明了为什么硬编码可能会变得不切实际,即使它看起来完全可以工作。 在二十世纪八十年代和九十年代,绝大多数个人电脑至少配有一个软驱,但软驱后来没有使用。 如果不更新,15年前以这种方式硬编码的程序可能会遇到问题。
特殊文件夹
一些Windows操作系统具有所谓的特殊文件夹,它们将文件逻辑地组织在硬盘上。 硬编码可能会出现问题:
简介路径
我的文档文件夹路径
解决办法
可以通过访问“浏览文件”对话窗口来扩展名称为“FileName”的间接引用,如变量内部的变量,如果文件移动,则程序代码不必更改。在准备用于翻译成其他语言的软件时,硬编码尤其成问题。
在许多情况下,单个硬编码值(例如数组大小)可能会在程序的源代码中出现多次。这将是一个神奇的数字。如果值的某些外观被修改,这可能通常会导致程序错误,但不是全部。这样的错误很难找到,并且可能会长时间保留在程序中。如果相同的硬编码值用于多于一个参数值,例如,可能会出现类似的问题。一个由6个元素组成的数组,最小输入字符串长度为6.程序员可能会错误地更改值的所有实例(通常使用编辑器的搜索和替换工具),而无需检查代码以查看每个实例的使用方式。通过定义将名称与值相关联的常量并在代码中使用每个外观的常量名称,可以避免这两种情况。
硬编码的一个重要情况是字符串直接放置在文件中,这迫使翻译人员编辑源代码以翻译程序。 (有一个名为gettext的工具,它允许字符串保留在文件中,但可以让译员在不更改源代码的情况下翻译它们;它可以有效地对字符串进行解码。)
比赛中的硬编码
在国际奥林匹克竞赛等计算竞赛中,参赛者需要根据问题的要求编写具有特定投入产出模式的程序。
在极少数情况下,可能的输入数量足够小,参赛者可能会考虑使用将所有可能输入映射到其正确输出的方法。这个程序将被认为是一种硬编码解决方案,而不是算法程序(尽管硬编码程序可能是算法程序的输出)。
最新修订时间:2022-08-25 19:51
目录
概述
介绍
参考资料