WINHEX的数据结构模板
生活随笔
收集整理的這篇文章主要介紹了
WINHEX的数据结构模板
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、模板概述
定制數(shù)據(jù)結(jié)構(gòu)模板,這當然比直接分析16進制的原始數(shù)據(jù)要方便得多,而且不容易出錯。你編輯好數(shù)據(jù)結(jié)構(gòu)模板保存后,數(shù)據(jù)模板就生效了。這樣你就可以分析來自硬盤、內(nèi)存等一些數(shù)據(jù),這些數(shù)據(jù)將套用你數(shù)據(jù)結(jié)構(gòu)模板來顯示數(shù)據(jù)了。例如:這樣你可以定制一個模板來查閱數(shù)據(jù)庫記錄。
模板本身是個帶擴展名TPL的文本文件。WINHEX提供的模板編輯器可以讓您寫模板的定義,并提供語法檢查. 模板的定義,主要包含變量聲明,類似于源代碼的編程語言. 支持的數(shù)據(jù)類型包括所有的共同整數(shù),浮點和布爾類型,日期類型, hex值,二進制,文字, 串型. 數(shù)組變量和一組變量,都可以使用.能自由移動,前移和后移的數(shù)據(jù),使得使用模板的特別靈活:
1.同一個變量可以有多種用途
2.你不關(guān)心的數(shù)據(jù)部分可以跳過
模板管理器列出所有的模板的winhex目錄,包含模板定義、標題、附加說明、文件名,點擊應用按鈕,顯示模板選用模板定義的數(shù)據(jù),在當前編輯窗在目前的數(shù)據(jù)解釋. 你也可以創(chuàng)造一個新的模板定義,刪除或編輯一個現(xiàn)有winhex提供的幾個模板樣例.
二、模板定義
模板由頭部和主體兩部分組成,模板頭部定義的格式如下:
template "title"???????? //模板標題
[description "description"]???? //說明
[applies_to (file/disk/RAM)]???? //應用到文件、磁盤還是內(nèi)存
[fixed_start offset]??????????????????//固定的起始偏移值
[sector-aligned]??????????????????????//扇區(qū)對齊
[requires offset "hex values"]//要求偏移的HEX值相等
[big-endian]?????????????????????????? //高字節(jié)優(yōu)先
[hexadecimal/octal]
[read-only]?????????????????????????? //只讀
[multiple [fixed overall size]]
// Put any general comments to the template here.
begin
variable declarations ...
end
中括號代表是該項是可選的.???? 表達式里面含有空格的話就要用雙引號引起來. 評論會出現(xiàn)在模板的定義. 字繼雙斜線被忽略的解析器. 注釋可以寫在任何地方,在注釋前要“//”號。
1.關(guān)鍵字" applies_to "必須跟著一個只有一個文件,磁盤或內(nèi)存 . 如果你是用一個模板解析的數(shù)據(jù)和用此關(guān)鍵字定義的數(shù)據(jù)來源不相同的話,winhex會發(fā)出一個警告。
2.當模板解釋這些數(shù)據(jù)時默認是從當前的光標位置處開始的,一旦使用fixed_start聲明位置,解釋將總是以指定的偏移位置處開始解釋.
3.如果模板應用于磁盤的情況下, 關(guān)鍵字"sector-aligned"確保模板從當前的扇區(qū)的開始處進行解釋, 而不管確切的光標在當前扇區(qū)的確切位置.
4."requires"的聲明與"applies_to "聲明有點類似,"requires" 聲明使WinHex 防止模板定義對不匹配的數(shù)據(jù)做錯誤解釋。指定一個偏移量和一個任意長度HEX串(十六進制串)來進行匹配。例如,一個有效的主引導記錄,可以確認的hex串值“55AA”在偏移0x1fe處 ; 一個可執(zhí)行文件的hex串值 " mz "在偏移0x0處 . 有許多" appliesto "聲明的模板定義頭部 ,都是考慮.
5.關(guān)鍵字"big-endian"導致模板定義所有多字節(jié)整數(shù)和布爾變量是以big-endian順序(高字節(jié)為優(yōu)先)的讀寫???? .????
6. 關(guān)鍵字" hexadecimal "使模板定義的所有整數(shù)變量的以十六進制記法顯示 .
7.關(guān)鍵字"read-only"確保模板只能用來顯示數(shù)據(jù). 數(shù)據(jù)將成灰色,就不能修改數(shù)據(jù)如果在頭部設(shè)定"multiple"關(guān)鍵字 , winhex允許瀏覽到相鄰的數(shù)據(jù)記錄在同個模板. 這就要求winhex要知道的記錄的大小. 如果"multiple"關(guān)鍵字沒有指定為尺寸參數(shù),winhex 計算模板結(jié)構(gòu)總尺寸( = record )來解釋當前位置到模板的對應的末尾. 如果這是一個可變尺寸, 即數(shù)組大小或移動參數(shù)來動態(tài)決定 winhex不能瀏覽先前數(shù)據(jù)記錄.
三、變量聲明
模板主體的定義主要包括變量聲明,類似于編程語言. 下面是變量聲明的基本形式
type "title"//類型 標題
下面是類型:
int8, uint8 = byte, int16, uint16, int24, uint24, int32, uint32, int64,
uint_flex
binary,
float = single, real, double, longdouble = extended,
char, char16, string, string16,
zstring, zstring16,
boole8 = boolean, boole16, boole32hex,
DOSDateTime, FileTime, OLEDateTime, SQLDateTime, UNIXDateTime = time_t, JavaDateTime
"title"只能包含在引號中若含空字符. "title"絕不能僅由數(shù)字組成. winhex不
區(qū)分大小寫字符稱. 最多有41字符.
在類型之前可以跟以下關(guān)鍵字
big-endian(高字節(jié)優(yōu)先????little-endian (低字節(jié)優(yōu)先)??
hexadecimal(十六進制)????decimal(十進制) octal(八進制)
read-only(只讀)????read-write(可讀寫)
這些修正只影響緊隨其后的變量. 他們是多余的,如果他們出現(xiàn)在頭已經(jīng)定義數(shù)據(jù)類型后面的數(shù)據(jù)代表占用空間大小的位數(shù),char16和string16是一樣的,winhex支持Unicode字符和字符串. 但是, Unicode字符以外的256個第一的ANSI等價字都不支持. 最高字符串大小,可以修改用模板是8192字節(jié).
各類串, string16 , hex需要額外參數(shù),明確了一些內(nèi)容. 這個參數(shù)可以是一個常數(shù)或一個先前宣布變數(shù)或數(shù)學表達(見下文) . 如果它是一個常數(shù),可以指定十六進制格式, 這是公認的,如果號碼是先0x .
你可以聲明變量數(shù)組,把數(shù)組大小括號旁邊的種類或 稱號. 以下兩行宣布可變大小的 ascii字符串,其長度取決于前變:??
???? uint8????"len"
???? char[len] "A string"
同樣的功能可以通過以下兩句來定義:
???? byte????"len"
???? string len "A string"
字符"~ "可以作為一個占位后更換與實際的數(shù)組元素的數(shù)目(見高級 命令) . 這并不適用于數(shù)組char變數(shù),因為它們會自動被翻譯成一個字符串. 字符串的參數(shù),整型變量數(shù)據(jù)大小的表達式,可在指定的數(shù)學符號. 他們將處理的綜合公式解析器. 這些用語須圓括號. 他們不能含有空字符. 他們可利用先前宣布整型變量的名字不包含空字符. 支持的行動,另外, ( + ) ,減法( - ) ,乘法( * ) ,整除( / ) ,取模( % ) , 位與 ( & ) , 位或 ( | ) , and 異或 ( ^ ) . 有效的數(shù)學公式所舉例( 5 * 2+1 )或( len1 / ( len2 +4 ) ) . 結(jié)果總是一個整數(shù),必須是一個正數(shù).
zstring和zstring16都是NULL結(jié)尾的字符串,其大小取決于動態(tài)地在運行決定.
四、高級命令
當附背帶,若干變量聲明包含一個塊,可以反復使用作為一個整體. 但是請注意,塊不能嵌套在當前的執(zhí)行工作. " ~ "字符可以用一個變量的名字作為占位符后更換為實際計數(shù). 擇" numbering "聲明界定在哪里開始計數(shù)( 0 by default )
????????numbering????1
????????{ tab byte????"len"
??????????string len "String No. ~"
????????} [10]
在這個例子實際變量的名字放在模板將"String No. 1", "String No. 2", ..., "String No. 10". 而不是一個固定的重復數(shù)目 ( 10在這個例子中) ,您可能還注明是"無限" . 在這種情況下winhex將重復塊到年底檔案遭遇. " exitloop "可以用來走出這條回路在任何時間
" ifequal "是有用的比較兩個表達式. operands可分為兩個數(shù)值,是恒定值十進制,整型變量或公式, 或者字節(jié)序列作文字或hex值是比較byte字節(jié). ascii字符串表達式必須加上引號, hex序列必須prreced了" 0x "標識. 公式須括弧.
????{ r byte????Value
??????IfEqual Value 1
??????????ExitLoop
??????EndIf
????} [10]
" ifequal " 以結(jié)束" endif "的聲明. 如果比較表達都是相等的,模板的解釋后繼續(xù)" ifequal " . optionally , " ifequal "可以遵循的不等的聲明. 模板處理器支進入" else "區(qū)塊,如果表達不能劃等號. " ifequal "命令不能嵌套. " ifgreater "類似于" ifequal " . 條件是正確的,如果第一表達的是大于二. 字符串按詞典順序進行比較.
為了便于閱讀和導航模板 你可確定一組的變量,在對話框中會在不同組的變量用空間分開:
section "...Section Title..."
...variable declaractions...
endsection
"section", "endsection", 和 "numbering"關(guān)鍵字都沒有與當前位置的解釋有
關(guān)。
有兩個命令也不做變量聲明,但被明確用來改變目前的位置. 可以跳過無關(guān)緊要的數(shù)據(jù)(向前移動)或能取得一定的變量不止一次 由于不同類型(反向運動) . 用" move n "聲明中跳過n字節(jié),由目前的位置,其中N可說是消極的. " goto n " 到指定絕對位置,從一開始的模板解釋(必須是位置) . :
???? int32????"Disk serial number (decimal)"
???? move -4
???? hex 4????"Disk serial number (hex)"
定制數(shù)據(jù)結(jié)構(gòu)模板,這當然比直接分析16進制的原始數(shù)據(jù)要方便得多,而且不容易出錯。你編輯好數(shù)據(jù)結(jié)構(gòu)模板保存后,數(shù)據(jù)模板就生效了。這樣你就可以分析來自硬盤、內(nèi)存等一些數(shù)據(jù),這些數(shù)據(jù)將套用你數(shù)據(jù)結(jié)構(gòu)模板來顯示數(shù)據(jù)了。例如:這樣你可以定制一個模板來查閱數(shù)據(jù)庫記錄。
模板本身是個帶擴展名TPL的文本文件。WINHEX提供的模板編輯器可以讓您寫模板的定義,并提供語法檢查. 模板的定義,主要包含變量聲明,類似于源代碼的編程語言. 支持的數(shù)據(jù)類型包括所有的共同整數(shù),浮點和布爾類型,日期類型, hex值,二進制,文字, 串型. 數(shù)組變量和一組變量,都可以使用.能自由移動,前移和后移的數(shù)據(jù),使得使用模板的特別靈活:
1.同一個變量可以有多種用途
2.你不關(guān)心的數(shù)據(jù)部分可以跳過
模板管理器列出所有的模板的winhex目錄,包含模板定義、標題、附加說明、文件名,點擊應用按鈕,顯示模板選用模板定義的數(shù)據(jù),在當前編輯窗在目前的數(shù)據(jù)解釋. 你也可以創(chuàng)造一個新的模板定義,刪除或編輯一個現(xiàn)有winhex提供的幾個模板樣例.
二、模板定義
模板由頭部和主體兩部分組成,模板頭部定義的格式如下:
template "title"???????? //模板標題
[description "description"]???? //說明
[applies_to (file/disk/RAM)]???? //應用到文件、磁盤還是內(nèi)存
[fixed_start offset]??????????????????//固定的起始偏移值
[sector-aligned]??????????????????????//扇區(qū)對齊
[requires offset "hex values"]//要求偏移的HEX值相等
[big-endian]?????????????????????????? //高字節(jié)優(yōu)先
[hexadecimal/octal]
[read-only]?????????????????????????? //只讀
[multiple [fixed overall size]]
// Put any general comments to the template here.
begin
variable declarations ...
end
中括號代表是該項是可選的.???? 表達式里面含有空格的話就要用雙引號引起來. 評論會出現(xiàn)在模板的定義. 字繼雙斜線被忽略的解析器. 注釋可以寫在任何地方,在注釋前要“//”號。
1.關(guān)鍵字" applies_to "必須跟著一個只有一個文件,磁盤或內(nèi)存 . 如果你是用一個模板解析的數(shù)據(jù)和用此關(guān)鍵字定義的數(shù)據(jù)來源不相同的話,winhex會發(fā)出一個警告。
2.當模板解釋這些數(shù)據(jù)時默認是從當前的光標位置處開始的,一旦使用fixed_start聲明位置,解釋將總是以指定的偏移位置處開始解釋.
3.如果模板應用于磁盤的情況下, 關(guān)鍵字"sector-aligned"確保模板從當前的扇區(qū)的開始處進行解釋, 而不管確切的光標在當前扇區(qū)的確切位置.
4."requires"的聲明與"applies_to "聲明有點類似,"requires" 聲明使WinHex 防止模板定義對不匹配的數(shù)據(jù)做錯誤解釋。指定一個偏移量和一個任意長度HEX串(十六進制串)來進行匹配。例如,一個有效的主引導記錄,可以確認的hex串值“55AA”在偏移0x1fe處 ; 一個可執(zhí)行文件的hex串值 " mz "在偏移0x0處 . 有許多" appliesto "聲明的模板定義頭部 ,都是考慮.
5.關(guān)鍵字"big-endian"導致模板定義所有多字節(jié)整數(shù)和布爾變量是以big-endian順序(高字節(jié)為優(yōu)先)的讀寫???? .????
6. 關(guān)鍵字" hexadecimal "使模板定義的所有整數(shù)變量的以十六進制記法顯示 .
7.關(guān)鍵字"read-only"確保模板只能用來顯示數(shù)據(jù). 數(shù)據(jù)將成灰色,就不能修改數(shù)據(jù)如果在頭部設(shè)定"multiple"關(guān)鍵字 , winhex允許瀏覽到相鄰的數(shù)據(jù)記錄在同個模板. 這就要求winhex要知道的記錄的大小. 如果"multiple"關(guān)鍵字沒有指定為尺寸參數(shù),winhex 計算模板結(jié)構(gòu)總尺寸( = record )來解釋當前位置到模板的對應的末尾. 如果這是一個可變尺寸, 即數(shù)組大小或移動參數(shù)來動態(tài)決定 winhex不能瀏覽先前數(shù)據(jù)記錄.
三、變量聲明
模板主體的定義主要包括變量聲明,類似于編程語言. 下面是變量聲明的基本形式
type "title"//類型 標題
下面是類型:
int8, uint8 = byte, int16, uint16, int24, uint24, int32, uint32, int64,
uint_flex
binary,
float = single, real, double, longdouble = extended,
char, char16, string, string16,
zstring, zstring16,
boole8 = boolean, boole16, boole32hex,
DOSDateTime, FileTime, OLEDateTime, SQLDateTime, UNIXDateTime = time_t, JavaDateTime
"title"只能包含在引號中若含空字符. "title"絕不能僅由數(shù)字組成. winhex不
區(qū)分大小寫字符稱. 最多有41字符.
在類型之前可以跟以下關(guān)鍵字
big-endian(高字節(jié)優(yōu)先????little-endian (低字節(jié)優(yōu)先)??
hexadecimal(十六進制)????decimal(十進制) octal(八進制)
read-only(只讀)????read-write(可讀寫)
這些修正只影響緊隨其后的變量. 他們是多余的,如果他們出現(xiàn)在頭已經(jīng)定義數(shù)據(jù)類型后面的數(shù)據(jù)代表占用空間大小的位數(shù),char16和string16是一樣的,winhex支持Unicode字符和字符串. 但是, Unicode字符以外的256個第一的ANSI等價字都不支持. 最高字符串大小,可以修改用模板是8192字節(jié).
各類串, string16 , hex需要額外參數(shù),明確了一些內(nèi)容. 這個參數(shù)可以是一個常數(shù)或一個先前宣布變數(shù)或數(shù)學表達(見下文) . 如果它是一個常數(shù),可以指定十六進制格式, 這是公認的,如果號碼是先0x .
你可以聲明變量數(shù)組,把數(shù)組大小括號旁邊的種類或 稱號. 以下兩行宣布可變大小的 ascii字符串,其長度取決于前變:??
???? uint8????"len"
???? char[len] "A string"
同樣的功能可以通過以下兩句來定義:
???? byte????"len"
???? string len "A string"
字符"~ "可以作為一個占位后更換與實際的數(shù)組元素的數(shù)目(見高級 命令) . 這并不適用于數(shù)組char變數(shù),因為它們會自動被翻譯成一個字符串. 字符串的參數(shù),整型變量數(shù)據(jù)大小的表達式,可在指定的數(shù)學符號. 他們將處理的綜合公式解析器. 這些用語須圓括號. 他們不能含有空字符. 他們可利用先前宣布整型變量的名字不包含空字符. 支持的行動,另外, ( + ) ,減法( - ) ,乘法( * ) ,整除( / ) ,取模( % ) , 位與 ( & ) , 位或 ( | ) , and 異或 ( ^ ) . 有效的數(shù)學公式所舉例( 5 * 2+1 )或( len1 / ( len2 +4 ) ) . 結(jié)果總是一個整數(shù),必須是一個正數(shù).
zstring和zstring16都是NULL結(jié)尾的字符串,其大小取決于動態(tài)地在運行決定.
四、高級命令
當附背帶,若干變量聲明包含一個塊,可以反復使用作為一個整體. 但是請注意,塊不能嵌套在當前的執(zhí)行工作. " ~ "字符可以用一個變量的名字作為占位符后更換為實際計數(shù). 擇" numbering "聲明界定在哪里開始計數(shù)( 0 by default )
????????numbering????1
????????{ tab byte????"len"
??????????string len "String No. ~"
????????} [10]
在這個例子實際變量的名字放在模板將"String No. 1", "String No. 2", ..., "String No. 10". 而不是一個固定的重復數(shù)目 ( 10在這個例子中) ,您可能還注明是"無限" . 在這種情況下winhex將重復塊到年底檔案遭遇. " exitloop "可以用來走出這條回路在任何時間
" ifequal "是有用的比較兩個表達式. operands可分為兩個數(shù)值,是恒定值十進制,整型變量或公式, 或者字節(jié)序列作文字或hex值是比較byte字節(jié). ascii字符串表達式必須加上引號, hex序列必須prreced了" 0x "標識. 公式須括弧.
????{ r byte????Value
??????IfEqual Value 1
??????????ExitLoop
??????EndIf
????} [10]
" ifequal " 以結(jié)束" endif "的聲明. 如果比較表達都是相等的,模板的解釋后繼續(xù)" ifequal " . optionally , " ifequal "可以遵循的不等的聲明. 模板處理器支進入" else "區(qū)塊,如果表達不能劃等號. " ifequal "命令不能嵌套. " ifgreater "類似于" ifequal " . 條件是正確的,如果第一表達的是大于二. 字符串按詞典順序進行比較.
為了便于閱讀和導航模板 你可確定一組的變量,在對話框中會在不同組的變量用空間分開:
section "...Section Title..."
...variable declaractions...
endsection
"section", "endsection", 和 "numbering"關(guān)鍵字都沒有與當前位置的解釋有
關(guān)。
有兩個命令也不做變量聲明,但被明確用來改變目前的位置. 可以跳過無關(guān)緊要的數(shù)據(jù)(向前移動)或能取得一定的變量不止一次 由于不同類型(反向運動) . 用" move n "聲明中跳過n字節(jié),由目前的位置,其中N可說是消極的. " goto n " 到指定絕對位置,從一開始的模板解釋(必須是位置) . :
???? int32????"Disk serial number (decimal)"
???? move -4
???? hex 4????"Disk serial number (hex)"
轉(zhuǎn)載于:https://blog.51cto.com/1038343/227219
總結(jié)
以上是生活随笔為你收集整理的WINHEX的数据结构模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux环境双网卡主机路由配置
- 下一篇: 宇瞻U盘出现无法格式化 写保护的完美解决