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