基本介紹
- 中文名:硬編碼
- 外文名:Hard coding
- 屬性:開發語言
- 表示舉例:物理常量
介紹,硬編碼和後門,硬編碼和DRM,啟動磁碟,特殊資料夾,簡介路徑,我的文檔資料夾路徑,解決辦法,比賽中的硬編碼,
介紹
硬編碼要求程式的原始碼在輸入數據或所需格式發生變化時進行更改,以便最終用戶可以通過程式外的某種方式更改細節。
硬編碼通常是必需的,但也可以被認為是反模式。程式設計師可能沒有針對最終用戶制定的動態用戶界面解決方案,但仍然必須提供該功能或發布該程式。這通常是暫時的,但從短期來看,確實解決了交付代碼的壓力。稍後,進行軟編碼以允許用戶傳遞參數,該參數為最終用戶提供修改結果或結果的方式。
術語“硬編碼”最初被用作硬連線電路的類比,並且意在表達軟體設計和實現中使用它所產生的不靈活性。在諸如MUD之類的運行時可擴展協作開發環境的上下文中,硬編碼還指開發負責低級任務和執行腳本的系統的核心引擎,而不是開發高級腳本的軟編碼。系統在運行時解釋。在這種情況下,這個術語不是貶義的,而是指一般的發展,而不是專門嵌入輸出數據。
硬編碼和後門
硬編碼憑證是創建後門的一種流行方式。硬編碼憑證通常在配置檔案和帳戶枚舉命令輸出中不可見,並且無法輕鬆更改(無需從源重建,如果源可用或逆向工程,二進制修改和完整性檢查(數字簽名,防篡改)和反作弊)旁路(可以通過EULA禁止)。
硬編碼和DRM
作為一項數字著作權管理措施,軟體開發商可能會將一個序列號硬編碼到一個程式中。或者硬編碼一個公共密鑰是常見的,創建一個不可行的DRM來創建一個keygen。
在相反的情況下,軟體破解者可能會將有效的序列號硬編碼到程式中,甚至阻止執行檔詢問用戶,從而允許未經授權的副本被重新分發而不需要輸入有效的號碼,從而共享相同的每個副本的密鑰,如果已經硬編碼。
修復安裝路徑。
修復安裝路徑。
如果Windows程式編程為假定它始終安裝到C:\ Program Files \ Appname,並且某人為了空間或組織原因嘗試將其安裝到其他驅動器,則可能無法安裝或在安裝後運行。在測試過程中可能無法識別此問題,因為普通用戶安裝到默認驅動器和目錄,測試可能不包括更改安裝目錄的選項。不過,程式設計師和開發人員不宜修復程式的安裝路徑,因為默認安裝路逕取決於作業系統,作業系統版本和系統管理員決定。例如,Microsoft Windows的許多安裝使用驅動器C:作為其主硬碟,但這不是保證。
早期計算機中的微處理器存在類似的問題,它開始在記憶體中的固定地址執行。
啟動磁碟
某些“複製保護”程式在啟動時在軟碟或快閃記憶體驅動器上查找特定檔案,以驗證它們不是未經授權的副本。 如果計算機被沒有軟碟驅動器的較新計算機所取代,無法運行需要它的程式,因為軟碟無法插入。
最後一個例子說明了為什麼硬編碼可能會變得不切實際,即使它看起來完全可以工作。 在二十世紀八十年代和九十年代,絕大多數個人電腦至少配有一個軟碟機,但軟碟機後來沒有使用。 如果不更新,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的工具,它允許字元串保留在檔案中,但可以讓譯員在不更改原始碼的情況下翻譯它們;它可以有效地對字元串進行解碼。)
比賽中的硬編碼
在國際奧林匹克競賽等計算競賽中,參賽者需要根據問題的要求編寫具有特定投入產出模式的程式。
在極少數情況下,可能的輸入數量足夠小,參賽者可能會考慮使用將所有可能輸入映射到其正確輸出的方法。這個程式將被認為是一種硬編碼解決方案,而不是算法程式(儘管硬編碼程式可能是算法程式的輸出)。