2015-11-05 20 views
1

我正在尝试使用Sulley创建模糊器。我使用的协议有一个字节control字段。在该字段中设置的位决定哪些字段可以遵循。现在我想知道如何使用Sulley中的dep参数来实现这种行为。唯一的dep_compare运营商可用是"==, !=, >, >=, <, <=",但我不认为我可以检查是否有一点与这些运营商设置在另一个领域。那么我怎么能做到这一点?Sulley模糊框架中的位标志依赖关系

s_byte(0b1000000, "control_field") 

# The following block shall be present if bit 7 is set in control_field 
# I'd like to use something like 
# > control_field & 0b1000000 != 0 
# but I don't know how 

if s_block_start("something_optional", dep="control_field", dep_compare="?"): 
    s_short(0x1234, "optional") 
s_block_end() 
+0

如果您自己制作补丁,请向项目提出拉取请求!如果您使用该工具的时间很长,您可能会遇到许多此类可能的改进。 – jtpereyda

回答

1

如果你只是要检查的最高位,你可以使用>=,因为0b10000000只是一个数字。

if s_block_start("something_optional", dep="control_field", dep_compare=">=", dep_value=0b10000000): 

如果你想检查低位,你需要实现你自己的操作符。在sulley/blocks.py中,请查找Block类及其render方法。有很大一块如果块不应该太难修改。例如。

 if self.dep_compare == "&" and self.dep_value & self.request.names[self.dep].value != self.dep_value: 
      self.rendered = "" 
      return