• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            自己制作winhex的模板

            傳送門

              winhex有很多的官方模板,可以在網上下載(后綴tpl)并放至它的安裝目錄,即可使用。不過要是自己能自己制作,這才好玩,不是么?!

              打開模板管理器,可以選中其中一個模板,下面有應用,有編輯,你點開編輯按鈕,就可以看到對應的模板源碼。而你點開那個新建按鈕,就可以自己寫模板了,最后保存到安裝目錄即可。提醒一點,我是在記事本下寫好粘貼到新建后那個面板上的,因為我發現有好些符號它不支持,比如下劃線、引號等,maybe是我自己沒設置的原因,不過,這不是重點,略過。寫好后,那個面板下有檢查語法的按鈕,通過它可判斷你的代碼是否語法正確。

              閑話不多說,下面,我來講解下模板編程的語法:

            模板頭的常用關鍵字:

              1.template:聲明模板的名字  eg:template "模板1"

              2.description:描述參數,描述這個模板的用途。(保存好后,你可以在模板管理器里看到你自定義的模板的名字,描述等信息。)eg:description "這個模板是用來。。。"

              3.applies_to:參數可以是file/disk/RAM。指定該模板的適用對象時文件、磁盤還是內存。eg:applies_to disk

              4.fixed_start offset:模板的默認起始偏移量取決于光標停留的位置,而這個關鍵字是來指定偏移量起始位置。eg:fixed_start 0x040

              5.sector-aligned:作用是指定模板從當前扇區的偏移0位置運行。無參數。

              6.requires offset:匹配數據,若發現指定偏移量的位置的數據不匹配,就會報錯。注意:這里的偏移量是相對于模板起始偏移量計算的。eg:requires 0x1fe "55aa"

              7.big-endian/little-endian:規定讀取的字節順序,也就是平日說的小端機、大端機的區別,內存的數據存儲方向不一樣。無參數。

              8.hexadecimal:使模板中讀到的數據都以十六進制方式顯示,octal為八進制,decimal為十進制。無參數。

              9.read-only/read-write:規定讀取權限。無參數。

              10.multiple:作用是使模板上出現左右鍵來讓你可以選擇讀取上一條或下一條記錄,記錄之間的跨度是該模板涉及的所有字節的長度。無參數。

              11.begin與end:之間的區域用于存放程序主干。

              這里作下模板頭知識總結:首先,模板的命名需要關鍵字template加引號完成。description參數可以補充描述。applies_to(RAM、file、disk)后面可以用于指定訪問對象的類型,使模板適應當前工程的根本環境。fixed_start可以為模板指定起始偏移量。requires則制定更嚴格的模板運行條件,要求模板作用范圍內指定位置必須匹配指定數據。big-endian、hexadecimal、read-only等都是作用于顯示輸出的可選參數。頭部關鍵字沒有強制規定“出場順序”,對引號的要求也不嚴格。此外,模板可以用雙斜杠添加注釋,這是一個很好的編程習慣。

              注意:數制屬性關鍵字(hexadecimal等)、顯示方向屬性關鍵字(big-endian等)、讀寫屬性關鍵字(read-only等)都可以插入begin與end之間,用于臨時改變數據的屬性,注意這種改變僅僅作用于緊隨它們的數據類型聲明語句,而并非全局。

              下面說下程序主干里的常用關鍵字:

              1.int8:帶符號的8位整型,占用一字節,范圍-128~127。eg:int8 "身高"

              2.uint8:無符號的8為整型,占用一字節,范圍0~255。同byte類型。

              3.int16:帶符號的16位整型,占用2字節。

              不贅述了,與前面這些類似的還有:uint16, int32, uint32, int64, int24, uint24。

              4.unit_flex:類似于c語言里位域的概念。其語法是:unit_flex "要解釋的位" "title"

              例如:unit_flex "8,7,6,5,4,3,2,1,0" "permissions",表示讀取一個32位無符號整數并解釋其低9位。

              注意,盡管unit_flex所表示的數據長度可能小于4個字節,但每次讀取仍然按照4個字節來計算,故而要特別注意位域的實際長度。比如,我們要解釋一個16位整型數值的前4位和后12位,應當首先解釋前4位,這時光標移動4字節。unit_flex "3,2,1,0" "flexlow" 因為還有數據要從該16位整型數值中提取,故回退4個字節。move -4 。 解釋后12位。unit_flex "15,14,13,12,11,10,9,8,7,6,5,4" "flexhigh"  由于16位整型數值只占用兩個字節,而實際光標移動4字節,故需要回退2字節:move -2,  否則會占用下一個數據的空間。

              5.binary:每次讀取一個字節,并解釋為二進制樣式。

              6.char:讀取一個字節,ascii碼顯示。也可以用char[len]讀取字符數組(字符串),len表示長度。

              7.char16:讀取兩個字節,Unicode字符顯示。

              8.string:ascii字符串。語法為string len "title"

              9.string16:unicode字符串。

              10.zstring:表示不管長度讀取一個ascii字符串,遇到"NULL"時結束。zstring16為其Unicode版本。

              11.hex:表示直接讀取字節而且并不將其解釋為任何數據類型,直接顯示。

              12.float:占用4字節,浮點數,同c語言。

              13.real:占用6字節,浮點數。

              14.double:占用8字節,浮點數。

              15.longdouble:占用10字節,浮點數。

              16.Loop:實現簡單的循環。中括號中可以存放常量表示循環次數,也可以直接引用前面數據類型的title。

              17.IfEqual:簡單的if語句,判斷是否相等。比較的對象可以是常量,也可以是前面數據類型的title。

              eg:

            byte "學號"
            IfEqual  "學號"  09
                uint  "成績"
            Else
                uint  "績點”
            EndIf

              18.~:占位符。一般用于循環內部數據類型的標題中,以形成數字遞增的效果。常常與numbering配合使用。numbering可以用來指定占位符的初始值。

              eg:

            復制代碼

            uint32  "文件數目"
            numbering 1
                {
                    string16  255  "~號文件"
                }["文件數目"]

            //占位符從1開始,循環代入string16 255 "~號文件"中。

            復制代碼

              下面是隨手寫的一個例子,很湊合的說~

              源碼:

            復制代碼

            template "the dbr of ntfs of jiu"
            description "......"
            applies_to disk
            sector-aligned
            requires 0x03 "4e54465320"
            requires 0x1f0 "55aa"
            little-endian
            read-write
            multiple
            begin
                hex 3        "jmp"
                char[8]      "OEM"
                uint16       "bytes per sector"
                uint8        "sectors per cluster"
                uint16       "unused"
                hex 3        "zero"
                hex 10       "unused"
                int64        "total sectors"
                int64        "mft"
                int64        "mftmirr"
                byte         "file record"
                hex 100      "......"
            end

            復制代碼

              自定義模板的應用:

            posted on 2016-11-30 16:09 FongLuo 閱讀(506) 評論(0)  編輯 收藏 引用

            <2009年8月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導航

            常用鏈接

            留言簿

            隨筆分類(11)

            隨筆檔案(79)

            文章檔案(1)

            收藏夾(38)

            學習網站

            一般網站

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久久久久久97| 久久伊人中文无码| 久久精品黄AA片一区二区三区| 久久妇女高潮几次MBA| av无码久久久久久不卡网站| 99久久精品免费| 国内精品久久国产| 91精品国产91热久久久久福利| 亚洲中文字幕伊人久久无码| 日韩AV无码久久一区二区| 国产精品女同一区二区久久| 久久精品国产日本波多野结衣| 日本久久久精品中文字幕| 亚洲中文字幕无码久久2020| 国产精品无码久久四虎| 日韩精品久久无码人妻中文字幕| 青青草国产精品久久| 欧美一区二区三区久久综合 | 要久久爱在线免费观看| 国内精品九九久久久精品| 久久精品亚洲欧美日韩久久| 久久99国产精品久久久| 无码国内精品久久人妻蜜桃| 无码任你躁久久久久久久| 久久99热狠狠色精品一区| 人妻无码中文久久久久专区| 久久综合亚洲色HEZYO社区| 久久天天躁狠狠躁夜夜2020| 国产高潮国产高潮久久久91 | 品成人欧美大片久久国产欧美| 久久国产亚洲高清观看| 久久午夜伦鲁片免费无码| 久久精品日日躁夜夜躁欧美| 亚洲国产天堂久久综合| 亚洲国产小视频精品久久久三级 | A狠狠久久蜜臀婷色中文网| 亚洲精品国产美女久久久| 99久久国产亚洲综合精品| 97香蕉久久夜色精品国产| 亚洲AⅤ优女AV综合久久久| 久久伊人影视|