幻數

出自KMU Wiki

在2008年5月12日 (一) 18:00由A11201625 (對話 | 貢獻)所做的修訂版本
(差異) ←上一修訂 | 當前修訂 (差異) | 下一修訂→ (差異)
跳轉到: 導航, 搜索

在 電腦編程, 期限 幻數 有多個意思。它能提到:

常數□去□常辨認文件格式或協議;
一個無提名並且/或者不適被提供的數字常數; 或
特別調試價值或 GUIDs, 等。


目錄

[編輯] 幻數起源

類型幻數最初地被發現了在 Unix 作業系統的早期的第七個編輯 原始代碼並且, 雖然它丟失了它的原義, 期限 幻數 有電腦行業詞典的成為的部份。

當 Unix 被端起了到一個第一 DEC PDP-11/20s 它沒有 記憶體保護 並且, 因此, Unix 的早期的版本使用了 可重定位的記憶參考 模型。[ 1 ] 因而, 第六個編輯Unix 版本 讀了一份可執行文件入記憶 和 前跳躍了對節目, 相對地址零的第一 低位存儲器地址 。以Unix 的被呼叫的版本的 發展, 倒栽跳水 被創造描述 可執行的圖像 組分。並且, 分支指令被插入了如同倒栽跳水的第一詞跳倒栽跳水和起動節目。這樣節目能運行在更舊的可重定位的記憶參考(規則) 方式下或在被呼叫的方式下。當更加可執行的格式被開發了, 新常數由增加增加了分支垂距。[ 2 ]

在 Unix 節目 裝載者的 第六個編輯原始代碼, exec() 作用讀了可執行的(二進制) 圖像從文件系統。文件的 第一 8 個位元組是 倒栽跳水 包含節目(文本) 並且初始化的(全球性) 資料區的大小。並且, 倒栽跳水的第一16 位詞與二個 常數比較 確定如果 可執行的圖像 包含了 可重定位的記憶參考 (正常), 最近被實施的 被呼叫的 只讀可執行的圖像、或被分離的指示和資料被呼叫的圖像。[ 3 ] 沒有倒栽跳水常數的雙重角色的提及, 但常數的高階位元組是, 實際上, 操作代碼 為PDP-11 分支指令(000407 或 0x0107) 。加七來程式計數器表示, 如果這個常數 被執行了, 它會分支Unix exec() 服務在可執行的圖像八位元組倒栽跳水和會起動節目。

因為Unix 的第六和第七編輯使用了調頁代碼, 倒栽跳水常數的雙重角色掩藏了。那是exec() 服務讀了可執行文件倒栽跳水(階) 資料入 仁空間 緩衝, 但讀了可執行的圖像入 用戶空間, 從而不是使用常數的分支的特點。幻數創作被實施了在Unix 連接器 並且 裝載者 和幻數分支大概仍然被使用了在來以 第六和 第七編輯獨立診斷程式的隨員。因而, 倒栽跳水常數提供了一種幻覺和符合了標準為 魔術。

在版本七Unix, 倒栽跳水常數直接地未被測試, 而是被分配了到一易變的被標記的 ux_mag[ 4 ] 並且隨後指 幻數。假設有大約10,000 個代碼行並且許多常數使用了在這些早期的Unix 版本, 這的確是一個好奇名字對於常數, 幾乎一樣好奇像 您不被預計瞭解這。[ 1 個] 評論被使用在版本六程式管理員的上下文開關程式部分。大概由於它的獨特, 期限 幻數 來意味可執行的格式類型, 然後被擴展意味文件系統類型, 和再被擴展意味任一個 強烈被鍵入的 文件。


[編輯] 幻數在文件的應用

幻數 是共同在節目橫跨許多作業系統。幻數實施 強烈被鍵入的 資料和是接車信號的 形式 對讀資料type(s) 在節目執行時間的控制程式。許多文件有辨認從容的資料的這樣常數。查出這樣常數在文件是一個簡單和有效的方式區別在許多 文件格式之間 , 可能產生進一步執行時間的 資訊。


一些例子:

編寫 Java 組文件(bytecode) 開始與 0xCAFEBABE。
GIF 圖像文件有 ASCII 代碼為' GIF89a ' (0x474946383961) 或' GIF87a ' (0x474946383761)
JPEG 圖像文件開始與 0xFFD8 和結束與 0xFFD9。JPEG/JFIF 文件包含 ASCII 代碼為' JFIF ' (0x4A464946) 如同空被終止的串。JPEG/Exif 文件並且包含 ASCII 代碼為' Exif '0x45786966() 如同空被終止的串, 被更多metadata 跟隨 關於文件。
PNG 圖像文件從辨認文件 作為PNG 文件和允許普通文件調動問題的直接偵查的一個8 個位元組署名開始(署名包含各種各樣的 換行字符為無保證的自動化的換行符轉換的偵查, 例如, 如果文件轉移在 FTP 以"ASCII" 調動方式 代替"二進制" 方式): \211 P N G \r \n \032 \n (0x89504e470d0a1a0a)
標準 MIDI 音樂文件有 ASCII 代碼為' MThd ' (0x4D546864) 被更多metadata 跟隨。
Unix 劇本文件通常開始以 shebang, ' #!' (0x2321) 被道路跟隨對口譯員。
附言 文件和節目開始以' %!' (0x2521) 。
PDF 文件開始與' %PDF ' 。
老 MS-DOS exe 文件和更新的 微軟視窗 PE (便攜式可執行) exe 文件開始與 ASCII 串' MZ ' (0x4D5A), 文件格式, 標記Zbikowski 的設計師的最初 。定義允許' ZM ' 但它是相當不凡的。
柏克來快速的文件系統 超級街區格式被辨認作為或者 0x19540119 或 0x011954 根據版本; 兩個代表生日作者 馬歇爾・Kirk McKusick。
可起動的 存貯設備 主要引導記錄在幾乎所有 IA-32 IBM 個人電腦Compatibles 有作為它的前 0xAA55 二個位元組代碼。
Executables 為 遊戲男孩 和 遊戲男孩前進 手扶的電動遊戲系統有一個48 位元組或156 位元組幻數, 各自地, 在一個固定的斑點在倒栽跳水。這個幻數輸入Nintendo 商標的 位圖 。
壓縮文件從' PK ' 開始, 菲爾・Katz, DOS 壓縮公共事業PKZIP 的作者 最初 。
老 擴展二進制 (包含代碼為 68K 處理器和 PowerPC 處理器) 在經典 Mac OS 包含了 ASCII 代碼為' 喜悅!' (0x4A6F7921) 作為前綴。
TIFF 文件從或"II" 或"毫米" 開始根據位元組次序(II 為英特爾, 或少許endian, 毫米為Motorola, 或大endian), 跟隨被 0x2A00 或 0x002A (小數 42 作為一個2 位元組整數在英特爾或Motorola 位元組定貨) 。
Unicode 文本文件被輸入在 UTF-16 經常開始以 位元組次序標記 查出 endianness (0xFEFF 為大endian 和0xFFFE 為一點endian) 。 UTF-8 文本文件經常開始以同樣字符的UTF-8 內碼, 0xEFBBBF 。
Unix 應用程式 file 可能讀和解釋幻數從文件, 並且的確, 被使用解析資訊的文件叫做 魔術。窗口公共 TrID 有一個相似的目的。


[編輯] =

[編輯] 幻數在協議

===

OSCAR 協議, 被使用在 目標/ICQ, 給請求加前綴與 0x2A。
在 RFB 協議 由VNC 使用, 客戶開始它的交談與伺服器由送"RFB" (0x524642, 為了"遙遠的機架緩衝器") 被客戶的協議版本號跟隨。
在 SMB 協議由微軟視窗使用, 各個SMB 請求或伺服器回復開始與 0xff534d42, 或"\xffSMB" 在SMB 請求的開始。
在 MSRPC 協議由微軟視窗使用, 各個基於TCP 的請求從在 0x05 請求的開始開始(代表微軟DCE/RPC 版本5), 立刻被跟隨被a 0x00 或 0x01 為較小版本。在基於UDP 的MSRPC 請求第一位元組總是 0x04。
DCOM 對象instantiation 請求轉入的 MSRPC 有一個巨大的容器對象告訴ORPC 這。這包含更小的對象參考結構, 稱OBJREFs, 總被加前綴以位元組序列"MEOW" 。調試引伸(被使用為DCOM 渠道鉤) 被加序言以位元組序列"MARB" 。
Unencrypted BitTorrent 跟蹤儀 請求從一個唯一位元組開始, 0x13 代表標頭長度, 被詞組"BitTorrent 協議" 立刻跟隨在位元組位置1 。
eDonkey/eMule 交通從一個唯一位元組開始代表客戶版本。代表 0xe3 eDonkey 客戶, 代表 0xc5 eMule, 和當前 0xd4 代表壓縮的eMule 。
SSL 交易從"客戶你好" 消息總開始。記錄封閉計劃使用給所有SSL 小包加前綴包括二個和三個位元組倒栽跳水形式。SSL 版本2 客戶你好消息典型地被加前綴與a 0x80 並且SSLv3 對客戶的伺服器反應你好開始與 0x16 (雖然這也許變化) 。
DHCP 小包使用在小包的選擇部分的 0x63825363 開始的"魔術的曲奇餅" 價值。這價值包括在所有DHCP 小包類型。




資料引用:[1]