winhex模板.docx_第1页
winhex模板.docx_第2页
winhex模板.docx_第3页
winhex模板.docx_第4页
winhex模板.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WINHEX的数据结构模板学习 阅读次数: 725 一、模板概述定制数据结构模板,这当然比直接分析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/octalread-only /只读multiple fixed overall size/ Put any general comments to the template here.beginvariable 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_flexbinary,float = single, real, double, longdouble = extended,char, char16, string, string16,zstring, zstring16,boole8 = boolean, boole16, boole32hex,DOSDateTime, FileTime, OLEDateTime, SQLDateTime, UNIXDateTime = time_t, JavaDateTimetitle只能包含在引号中若含空字符. 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字符串,其长度取决于前变:uint8lencharlen A string同样的功能可以通过以下两句来定义:bytelenstring len A string字符 可以作为一个占位后更换与实际的数组元素的数目(见高级 命令) . 这并不适用于数组char变数,因为它们会自动被翻译成一个字符串. 字符串的参数,整型变量数据大小的表达式,可在指定的数学符号. 他们将处理的综合公式解析器. 这些用语须圆括号. 他们不能含有空字符. 他们可利用先前宣布整型变量的名字不包含空字符. 支持的行动,另外, ( + ) ,减法( - ) ,乘法( * ) ,整除( / ) ,取模( % ) , 位与 ( & ) , 位或 ( | ) , and 异或 ( ) . 有效的数学公式所举例( 5 * 2+1 )或( len1 / ( len2 +4 ) ) . 结果总是一个整数,必须是一个正数. zstring和zstring16都是NULL结尾的字符串,其大小取决于动态地在运行决定. 四、高级命令当附背带,若干变量声明包含一个块,可以反复使用作为一个整体. 但是请注意,块不能嵌套在当前的执行工作. 字符可以用一个变量的名字作为占位符后更换为实际计数. 择 numbering 声明界定在哪里开始计数( 0 by default ) numbering1 tab bytelenstring 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 byteValueIfEqual Value 1ExitLoopEndIf 10 ifequal 以结束 endif 的声明. 如果比较表达都是相等的,模板的解释后继续 ifequal . optionally , ifequal 可以遵循的不等的声明. 模板处理器支进入 else 区块,如果表达不能划等号. ifequal 命令不能嵌套. ifgreater 类似于 ifequal . 条件是正确的,如果第一表达的是大于二. 字符串按词典顺序进行比较. 为了便于阅读和导航模板 你可确定一组的变量,在对话框中会在不同组的变量用空间分开:section .Section Title.variable declaractions.endsectionsection, endsection, 和 numbering关键字都没有与当前位置的解释有关。有两个命令也不做变量声明,但被明确用来改变目前的位置. 可以跳过无关紧要的数据(向前移动)或能取得一定的变量不止一次 由于不同类型(反向运动) . 用 move n 声明中跳过n字节,由目前的位置,其中N可说是消极的. goto n 到指定绝对位置,从一开始的模板解释(必须是位置) . : int32Disk serial number (decimal)move -4hex 4Disk serial number (hex) WinHex模板入门教程WINHEX模板, 模板教程Winhex强大的模板功能,我们无需死记硬背每个字节的含义是什么,占用几个字节。不足的是,winhex提供给我的模板是在是太少了,比如遇到一个陌生的文件系统,或者是文件结构,我们还得去记忆某个字节代表什么,zzzZZZZZ,很费时,效率又很低。我们今天就为大家讲述一下如何制作自己的模板,打开winhex,然后选择“view”,-“template manger” 先看一下别人是怎么创建的。点edit按钮上图显示的就是模板的代码。template Boot Sector NTFS 就是模板的名字,“NTFS的引导扇区模板”,可以不写。description Boot sector of an NTFS partition描述,就是这个模板是做什么用;可以不写applies_to disk 适用于硬盘; sector-aligned 扇区对其;requires 0x00 “EB”调用这个模板以后,软件就会自动检查,在偏移00的位置是否有0xEB这两个字节,如果没有,winhex就会弹出来一个消息框,提示再0x00的位置没有找到0xEB;可以设置多个标志,如本例中的55AA的结束标记在开始之前,简单普及一下数据类型Hex十六进制Char 字符类型;Int整型;(有负数)Uint= unsigned int 无符号整型;写模板,从begin开始,到end结束。也就是说。我们的结构体,是在这个中间的。以下模板为NTFS的DBR的模板,由于考虑篇幅问题,我删减了一部分,详细资料,请参考winhex提供的模板。begin read-only hex 3 JMP instruction /00 char8 File system ID /03 uint16 Bytes per sector uint32 Hidden sectors /1C read-only hex 4 (unused) /20 read-only hex 4 (always 80 00 80 00) /24 int64 Total sectors /28 uint32 Checksum /50 goto 0x1FE /boot loa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论