2021-07-09 16:01:21 +02:00

29 lines
1.3 KiB
Plaintext

rule rule1 :=
for (!pc: int) in pcsForOpcode(CALL)
clause [?size: int, ?sa: array<AbsDom>, ?mem: array<AbsDom>, ?in: AbsDom, ?stor: array<AbsDom>, ?cl: bool]
ExState{!pc}(?size, ?sa, ?mem, ?in, ?stor, ?cl),
?size > 3
=> ExState{0}(0, [@V(0)], [@V(0)], @T, ?stor, true);
rule rule2 :=
for (!pc: int) in pcsForOpcode(CALL)
clause [?size: int, ?sa: array<AbsDom>, ?mem: array<AbsDom>, ?in: AbsDom, ?stor: array<AbsDom>, ?cl: bool, ?storInv: array<AbsDom>, ?r: AbsDom]
ExState{!pc}(?size, ?sa, ?mem, ?in, ?stor, ?cl),
?size > 3,
Halt{}(?storInv, ?r, true)
=> ExState{0}(0, [@V(0)], [@V(0)], @T, ?storInv, true);
rule rule3 :=
for (!pc: int) in pcsForOpcode(CALL)
clause [?size: int, ?sa: array<AbsDom>, ?mem: array<AbsDom>, ?in: AbsDom, ?stor: array<AbsDom>, ?cl: bool]
ExState{!pc}(?size, ?sa, ?mem, ?in, ?stor, ?cl),
?size > 3
=> ExState{!pc+1}(?size-3, store ?sa (?size - 4) @V(1), [@T], ?in, [@T], ?cl);
rule rule4 :=
for (!pc: int) in pcsForOpcode(CALL)
clause [?size: int, ?sa: array<AbsDom>, ?mem: array<AbsDom>, ?in: AbsDom, ?stor: array<AbsDom>, ?cl: bool]
ExState{!pc}(?size, ?sa, ?mem, ?in, ?stor, ?cl),
?size > 3
=> ExState{!pc+1}(?size-3, store ?sa (?size - 4) @V(0), ?mem, ?in, [@T], ?cl);