Peach Fuzzer - Data Modeling - Choice

Choice

Choice元素是DataModel或Block的子元素。 Choice元素用于指示任何子元素都是有效的,但只能选择一个。 很像编程语言中的switch语句。

<Choice name="ChoiceBlock">
  <Block name="Type1">
    <!-- ... -->
  </Block>
  <Block name="Type2">
    <!-- ... -->
  </Block>
  <Block name="Type3">
    <!-- ... -->
  </Block>
</Choice>

Attributes:

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

  • name - 选择部分的名称。
  • minOccurs - 此Choice必须发生的最小次数。
  • maxOccurs - 此Choice可能发生的最大次数。
  • occurs - 这种选择可能发生的次数。

Valid Child-Elements:

  • Block
  • Choice
  • String
  • Number
  • Blob
  • Flags
  • Fixup
  • Transformer
  • XmlAttribute
  • XmlElement

Examples:

一个基本的Choice Block。 该Choice示例将破解或使用类型为1,2,3的数据。 就像常规的switch语句一样,需要在标记上做出决定。

如果前8位值为1,则剩余数据被视为一个32位的数。 如果前8位值为2,则剩余数据被视为一串长度为255个字节的二进制数据。 如果前8位值为3,则剩余数据被视为一个8字节的字符串。

当进行模糊化测试时Peach会选择三种类型之一,将其模糊为8位数字输出,并且接着输出相应的类型。 Peach将尝试全部三种类型。

<DataModel name="ChoiceExample1">
 <Choice name="Choice1">

  <Block name="Type1">
    <Number name="Str1" size="8" value="1" token="true" />
    <Number size="32"/>
  </Block>

  <Block name="Type2">
    <Number name="Str2" size="8" value="2" token="true" />
    <Blob length="255" />
  </Block>

  <Block name="Type3">
    <Number name="Str3" size="8" value="3" token="true" />
    <String length="8" />
  </Block>
 </Choice>
</DataModel>

An array of Choices

第一个例子适合做出单一选择,但如果有很多Type1 Type2和Type3块都相互连接,会怎么样呢? 设置minOccurs,maxOccurs或occurs以指定Choice应该被重复。

<DataModel name="ChoiceExample1">
 <Choice name="Choice1" minOccurs="3" maxOccurs="6">

  <Block name="Type1">
    <Number name="Str1" size="8" value="1" token="true" />
    <Number size="32"/>
  </Block>

  <Block name="Type2">
    <Number name="Str2" size="8" value="2" token="true" />
    <Blob length="255" />
  </Block>

  <Block name="Type3">
    <Number name="Str3" size="8" value="3" token="true" />
    <String length="8" />
  </Block>
 </Choice>
</DataModel>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值