日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java winhex_winhex模版

發(fā)布時(shí)間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java winhex_winhex模版 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 模板頭

模板頭的格式:

template "title"

[description "description"]

[applies_to (file/disk/RAM)]

[fixed_start offset]

[sector-aligned]

[requires offset "hex values"]

[big-endian]

[hexadecimal/octal]

[read-only]

[multiple [fixed overall size]]

// Put any general comments to the template here.

begin

variable declarations

end

在方括號(hào)里的標(biāo)簽表示為可選項(xiàng)。標(biāo)簽的順序沒(méi)有硬性的規(guī)定,用戶可以隨意的更改他們的順序。表達(dá)式中如果有空格則必須用雙引號(hào)括起來(lái)。模板文件中的注釋以為雙斜杠開(kāi)頭。

關(guān)鍵字“applies_to”后必須跟著“file,disk,或RAM”中的一個(gè)。模板應(yīng)用于不同的介質(zhì)的時(shí)候,winhex將發(fā)出錯(cuò)誤警告。

默認(rèn)的情況下,模板將從窗口中光標(biāo)的位置處執(zhí)行,使用“fixed_start”選項(xiàng)將讓模板從磁盤(pán)或文件的偏移量的絕對(duì)開(kāi)頭處運(yùn)行。

應(yīng)用于磁盤(pán)的模板,關(guān)鍵字“sector-aligned”將讓模板從當(dāng)前扇區(qū)的開(kāi)頭處運(yùn)行,而忽略光標(biāo)的當(dāng)前位置。

關(guān)鍵字“requires”同“applies_to”的功能類似,都是為了避免模板定義的數(shù)據(jù)和應(yīng)用程序的數(shù)據(jù)不匹配而引發(fā)的錯(cuò)誤。可以利用“requires”事先指定好特征碼。比如,一個(gè)有效的主引導(dǎo)扇區(qū)偏移量0x1FE位置必須為“55 AA”(也就是扇區(qū)的最后兩個(gè)字節(jié)),而一個(gè)有效的可執(zhí)行文件在偏移量0x0位置必須為“4D 5A”(“MZ”)。模板頭中可以定義多行“ applies_to”。

關(guān)鍵字“big-endian”使模板中讀到的字節(jié)以big-endian順序排列(高位字節(jié)開(kāi)頭,intel平臺(tái)中一般都是little-endian,蘋(píng)果機(jī)中通常為big-endian,在windows下分析mac文件可能會(huì)用到此關(guān)鍵字)

關(guān)鍵字“hexadecimal”使模板中獨(dú)到的數(shù)據(jù)都以16進(jìn)制方式顯示。

關(guān)鍵字“read-only”使模板執(zhí)行后顯示的模板面板為只讀模式,不可通過(guò)模板面修改數(shù)據(jù)。

關(guān)鍵字“multiple”可以讓模板直接讀取臨近的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(只適用于數(shù)據(jù)大小固定的情況下)。(可以參考winhex下的“FAT Directory Entry”模板)

2 主干:變量申明

模板文件的主干部分同其他編程語(yǔ)言一樣,主要由變量申明組成。申明的基礎(chǔ)形式如下:

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, boole32

hex,

DOSDateTime, FileTime, OLEDateTime, SQLDateTime, UNIXDateTime = time_t, JavaDateTime

如果“title”包括空格就必須使用雙引號(hào)括起來(lái)(“title”不能全都是數(shù)字,并且“title”部分大小寫(xiě)不敏感)。最多可以包含41個(gè)字符。

“type”部分至少可以使用下列的一個(gè)關(guān)鍵字來(lái)修飾:

big-endian????little-endian

hexadecimal?? decimal??????????octal

read-only???? read-write

這些關(guān)鍵字會(huì)直接作用于其后的變量。如果他們?cè)陬^部已經(jīng)定義過(guò)了,那么在主干部分再重復(fù)定義就顯的多余了。(在頭部定義后作用于全局)

在“type”之后的數(shù)字表示變量的長(zhǎng)度(數(shù)值則為字節(jié),字符串則為字符,在模板中可編輯的長(zhǎng)度最多為8192個(gè)字節(jié))。在winhex中使用“char16”,“string16”以及“hex”可以支持使用unicode字符和字符串,但不支持unicode字符開(kāi)頭的256個(gè)ANSI字符。

“string”,“string16”以及“hex”類型

The types string,??string16, and??hex require an additional parameter that specifies the

number of elements. This parameter may be a constant or a previously declared variable. If it is a

constant, it may be specified in hexadecimal format, which is recognized if the number is

preceded by 0x.

用戶可以申明一個(gè)將數(shù)組變量,并且將數(shù)組變量的大小放在后面的方括號(hào)里(如果指定為“unlimited”,則模板會(huì)執(zhí)行直到文件結(jié)尾處)。以下兩行代碼申明了一個(gè)動(dòng)態(tài)的ASCII字符串,其長(zhǎng)度取決于之前的變量大小:

uint8??????"len"

char[len]??"A string"

以下兩句功能相同

byte?????? "len"

string len "A string"

字符“~”表示數(shù)組編號(hào)的占位符(請(qǐng)看下面)。這個(gè)字符對(duì)“char”數(shù)據(jù)類型的變量無(wú)效,因此會(huì)自動(dòng)的解析成字符串類型。

string,string16和hex類型的變量大小,可以通過(guò)數(shù)學(xué)表達(dá)式來(lái)表示,數(shù)學(xué)表達(dá)式需要用括號(hào)括起來(lái),并且表達(dá)式中不能包含空格。同樣也可以將變量帶入數(shù)學(xué)表達(dá)式中(同樣變量名不能有空格)。支持的操作有,加法(+),減法(-),乘法(*),整除(/),模除(%),邏輯運(yùn)算符AND(&),OR(|),以及XOR(^)。比如:(5*2+1),(len1/(len2+4))。注意:結(jié)果必須為正整數(shù)。

3 主干:高級(jí)命令

當(dāng)我們用大括號(hào)將一個(gè)代碼塊設(shè)置循環(huán)運(yùn)行時(shí),我們可以用占位符“~”來(lái)確定循環(huán)的次數(shù),下列代碼中“numbering”定義了初始值為1(默認(rèn)為0)。

numbering??1

{

byte?????? "len"

string len "String No. ~"

}[10]

上面代碼在模板中的運(yùn)行結(jié)果將顯示:“String No. 1”, “String No. 2”...“String No. 10”。用戶可以使用“unlimited”代替方括號(hào)中的10,這樣winhex就會(huì)循環(huán)執(zhí)行直到文件結(jié)尾部分。或者使用“ExitLoop”強(qiáng)迫循環(huán)終止。

在比較兩個(gè)值是否相等方面,winhex模板給出了一個(gè)非常有用的命令“IfEqual”。“IfEqual”操作的兩個(gè)表達(dá)式可以是10進(jìn)制常量,整數(shù)變量或數(shù)學(xué)表達(dá)式,或者字符串(文本或16進(jìn)制值(winhex將逐字節(jié)的進(jìn)行比較))。ASCII字符串必須用雙引號(hào)括起來(lái)。而16進(jìn)制數(shù)必須用“0x”開(kāi)頭。公式需要用括號(hào)括起來(lái)。

{

byte?? Value

IfEqual??Value 1

ExitLoop

EndIf

} [10]

“IfEqual”命令以“EndIf”語(yǔ)句作為結(jié)尾。如果表達(dá)式的值是相同的則繼續(xù)運(yùn)行。還可以在語(yǔ)句中插入“Else”語(yǔ)句,這樣當(dāng)“IfEqual”的兩個(gè)表達(dá)式不相同時(shí),跳轉(zhuǎn)到“Else”下繼續(xù)執(zhí)行。“IfEqual”語(yǔ)句不可以鑲套使用。“IfGeater”語(yǔ)句和“IfEqual”的用法相似。只是“IfGeater”是用來(lái)比較第一個(gè)表達(dá)式的值是否大于第二個(gè)表達(dá)式的值。字符串和16進(jìn)制值將按照字典順序排列。

為了方便閱讀和查看模板文件,你可以將某些變量捆綁為一組,單獨(dú)的顯示在模板面板上:

section????"...Section Title..."

...

endsection

“move”和“goto”命令不用來(lái)申明變量,但是可以精確的改變當(dāng)前位置,跳過(guò)無(wú)關(guān)的數(shù)據(jù)。使用move n語(yǔ)句可以從當(dāng)前位置條國(guó)n個(gè)字節(jié)到下一個(gè)位置,n可以為負(fù)值(正即向前跳,負(fù)即向后跳)。而goto n語(yǔ)句中的n則表示了從模板開(kāi)始解釋的地方到n的絕對(duì)位置(此時(shí)的n必須為正數(shù))

下面的例子演示了如何將一個(gè)變量作為整數(shù)和16進(jìn)制數(shù)值查看的方法:

int32??????"Disk serial number (decimal)"

move -4

hex 4??????"Disk serial number (hex)"

4 主干:靈活的整數(shù)變量

winhex模板支持的一個(gè)特殊的變量類型是“uint_flex”。

總結(jié)

以上是生活随笔為你收集整理的java winhex_winhex模版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。