当前位置: 首页 > 工具软件 > Peach Fuzzer > 使用案例 >

Peach Fuzzer - Data Modeling - Block

督坚白
2023-12-01

Block

Block元素是DataModel或Block的子元素。 Blocks用于将一个或多个数据元素(例如Number或String)组合到一个逻辑结构中。 Block和DataModel非常相似,唯一的区别是它们的位置。 DataModel是顶级元素,Blocks是DataModel的子元素。 Block和DataModel元素都可以用作其他Blocks或DataModel的“模板”。

<Block name="HelloWorld">
  <String value="Hello world!" />
</Block>

Attributes:

除非另有说明,所有属性都是可选的。

  • name - Block的名称。
  • ref - 引用[DataModel / DataModel]]作为模板。
  • minOccurs - 此Block必须发生的最小次数。
  • maxOccurs - 此Block可能发生的最大次数。
  • mutable - 数据元素是否可更改(是否应该进行变异),默认为true。

Valid Child-Elements

  • Blob
  • Block
  • Choice
  • Custom
  • Fixup
  • Flag
  • Flags
  • Number
  • Padding
  • Placement
  • Relation
  • Seek
  • String
  • Transformer
  • XmlAttribute
  • XmlElement

Examples:

Empty Block

最简单的block定义是一个空block。这种定义将不会产生输出。

<DataModel name="BlockExample1">
 <Block>
 </Block>
</DataModel>

Nested Blocks

Block可以根据需要嵌套。 Block有助于创建逻辑结构,并且不会更改其中包含的数据。

<DataModel name="BlockExample2">
<Block>
  <Block>
    <Block>
      <String value="1" />
    </Block>

    <Block>
      <String value="2" />
    </Block>

    <String value="3" />
  </Block>
  <String value="4" />
</Block>
</DataModel>

这种嵌入式定义下的Block将会产生如下输出:

1234

Naming A Block

给Block一个友好的命名可使它们更容易理解和调试。

<DataModel name="BlockExample2">
 <Block name="HeaderDef">
  <String name="Header" />
  <String name="Colon" value=":"/>
  <String name="Val"/>
 <Block>

 <Block name="DataDef">
   <Number name="Type"  size="8" value="4"/>
   <Number name="Data" size="8" value="32"/>
 </Block>
 </DataModel>

Referencing A Block

使用reference元素(ref属性)会把被引用的DataModel或者Block的内容复制过来以作为构建新Block的基础。新Block中的任何子元素将覆盖已存在的具有相同名称的元素。

<DataModel name="OtherDataModel">
   <String value="Hello World"/>
 </DataModel>

 <DataModel name="ThisDataModel">
    <Block name="MyName" ref="OtherDataModel"/>
 </DataModel>

Block “MyName” 将被引用块“OtherDataModel”覆盖。 在解析它时,数据结构看起来像这样。

<DataModel name="ThisDataModel">
   <Block name="MyName">
    <String value="Hello World"/>
   </Block>
 </DataModel>

Reference允许构建功能强大的模板。 这是一个Key:Value \ r \ n的模板。

<DataModel name="Template">
  <String name="Key" />
  <String value=": " token="true" />
  <String name="Value" />
  <String value="\r\n" token="true" />
</DataModel>

引用此模板:

<DataModel name="OtherModel">
  <String value="Before Block\r\n" />

  <Block name="Customized" ref="Template">
    <String name="Key" value="Content-Length" />
    <String name="Value" value="55"/>
  </Block>
</DataModel>

输出为:

Before Block\r\n
Content-Length: 55\r\n

这里发生了两件重要事情。 在分析时,”Customized Block”将用”Template”的DataModel替换它的结构。 添加“:”和“\ r \ n”的字符串值。

同时,“Customized”Block重写了Key和Value的String元素的值。 将它们替换为“Content-Length”和55.最终的DataModel将被解析为如此。

<DataModel name="OtherModel">
  <String value="BeforeBlock" />

  <Block name="Customized" ref="Template">
    <String name="Key" value="Content-Length" />
    <String value=": " token="true" />
    <String name="Value" value="55" />
    <String value="\r\n" token="true" />
  </Block>
</DataModel>
 类似资料: