1

Sulley と Fuzzer を構築しようとしています。私が使用しているプロトコルには、1 バイトcontrolのフィールドがあります。このフィールドに設定されたビットは、どのフィールドが続くかを決定します。今dep、Sulley のパラメーターを使用してこの動作を実装する方法を考えています。dep_compare使用可能な演算子はのみですが"==, !=, >, >=, <, <="、これらの演算子を使用して別のフィールドにビットが設定されているかどうかを確認できるとは思いません。では、どうすればこれを行うことができますか?

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()
4

1 に答える 1

1

>=0b10000000 は単なる数値であるため、最上位ビットのみを確認する場合は、 を使用できます。

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

ただし、下位ビットをチェックする場合は、独自の演算子を実装する必要があります。で、クラスとそのメソッドをsulley/blocks.py探します。変更が難しくない if ブロックの大きな塊があります。例えばBlockrender

        if self.dep_compare == "&" and self.dep_value & self.request.names[self.dep].value != self.dep_value:
            self.rendered = ""
            return
于 2015-11-09T16:16:56.250 に答える