17
17
package vm
18
18
19
19
import (
20
+ "math/bits"
20
21
"testing"
21
22
22
23
"github.com/ethereum/go-ethereum/crypto"
@@ -28,24 +29,27 @@ func TestJumpDestAnalysis(t *testing.T) {
28
29
exp byte
29
30
which int
30
31
}{
31
- {[]byte {byte (PUSH1 ), 0x01 , 0x01 , 0x01 }, 0x40 , 0 },
32
- {[]byte {byte (PUSH1 ), byte (PUSH1 ), byte (PUSH1 ), byte (PUSH1 )}, 0x50 , 0 },
33
- {[]byte {byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), 0x01 , 0x01 , 0x01 }, 0x7F , 0 },
34
- {[]byte {byte (PUSH8 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0x80 , 1 },
35
- {[]byte {0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte (PUSH2 ), byte (PUSH2 ), byte (PUSH2 ), 0x01 , 0x01 , 0x01 }, 0x03 , 0 },
36
- {[]byte {0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte (PUSH2 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0x00 , 1 },
37
- {[]byte {byte (PUSH3 ), 0x01 , 0x01 , 0x01 , byte (PUSH1 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0x74 , 0 },
38
- {[]byte {byte (PUSH3 ), 0x01 , 0x01 , 0x01 , byte (PUSH1 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0x00 , 1 },
39
- {[]byte {0x01 , byte (PUSH8 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0x3F , 0 },
40
- {[]byte {0x01 , byte (PUSH8 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0xC0 , 1 },
41
- {[]byte {byte (PUSH16 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0x7F , 0 },
42
- {[]byte {byte (PUSH16 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0xFF , 1 },
43
- {[]byte {byte (PUSH16 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0x80 , 2 },
44
- {[]byte {byte (PUSH8 ), 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte (PUSH1 ), 0x01 }, 0x7f , 0 },
45
- {[]byte {byte (PUSH8 ), 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte (PUSH1 ), 0x01 }, 0xA0 , 1 },
46
- {[]byte {byte (PUSH32 )}, 0x7F , 0 },
47
- {[]byte {byte (PUSH32 )}, 0xFF , 1 },
48
- {[]byte {byte (PUSH32 )}, 0xFF , 2 },
32
+ {[]byte {byte (PUSH1 ), 0x01 , 0x01 , 0x01 }, 0b0000_0010 , 0 },
33
+ {[]byte {byte (PUSH1 ), byte (PUSH1 ), byte (PUSH1 ), byte (PUSH1 )}, 0b0000_1010 , 0 },
34
+ {[]byte {0x00 , byte (PUSH1 ), 0x00 , byte (PUSH1 ), 0x00 , byte (PUSH1 ), 0x00 , byte (PUSH1 )}, 0b0101_0100 , 0 },
35
+ {[]byte {byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), byte (PUSH8 ), 0x01 , 0x01 , 0x01 }, bits .Reverse8 (0x7F ), 0 },
36
+ {[]byte {byte (PUSH8 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b0000_0001 , 1 },
37
+ {[]byte {0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte (PUSH2 ), byte (PUSH2 ), byte (PUSH2 ), 0x01 , 0x01 , 0x01 }, 0b1100_0000 , 0 },
38
+ {[]byte {0x01 , 0x01 , 0x01 , 0x01 , 0x01 , byte (PUSH2 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b0000_0000 , 1 },
39
+ {[]byte {byte (PUSH3 ), 0x01 , 0x01 , 0x01 , byte (PUSH1 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b0010_1110 , 0 },
40
+ {[]byte {byte (PUSH3 ), 0x01 , 0x01 , 0x01 , byte (PUSH1 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b0000_0000 , 1 },
41
+ {[]byte {0x01 , byte (PUSH8 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b1111_1100 , 0 },
42
+ {[]byte {0x01 , byte (PUSH8 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b0000_0011 , 1 },
43
+ {[]byte {byte (PUSH16 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b1111_1110 , 0 },
44
+ {[]byte {byte (PUSH16 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b1111_1111 , 1 },
45
+ {[]byte {byte (PUSH16 ), 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 , 0x01 }, 0b0000_0001 , 2 },
46
+ {[]byte {byte (PUSH8 ), 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte (PUSH1 ), 0x01 }, 0b1111_1110 , 0 },
47
+ {[]byte {byte (PUSH8 ), 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , byte (PUSH1 ), 0x01 }, 0b0000_0101 , 1 },
48
+ {[]byte {byte (PUSH32 )}, 0b1111_1110 , 0 },
49
+ {[]byte {byte (PUSH32 )}, 0b1111_1111 , 1 },
50
+ {[]byte {byte (PUSH32 )}, 0b1111_1111 , 2 },
51
+ {[]byte {byte (PUSH32 )}, 0b1111_1111 , 3 },
52
+ {[]byte {byte (PUSH32 )}, 0b0000_0001 , 4 },
49
53
}
50
54
for i , test := range tests {
51
55
ret := codeBitmap (test .code )
0 commit comments