forked from cerc-io/plugeth
core/vm: Rename + updated doc on jumpdest analysis
This commit is contained in:
parent
54b1de67e2
commit
d6681ed360
@ -38,7 +38,7 @@ func (d destinations) has(codehash common.Hash, code []byte, dest *big.Int) bool
|
|||||||
|
|
||||||
m, analysed := d[codehash]
|
m, analysed := d[codehash]
|
||||||
if !analysed {
|
if !analysed {
|
||||||
m = jumpdests(code)
|
m = codeBitmap(code)
|
||||||
d[codehash] = m
|
d[codehash] = m
|
||||||
}
|
}
|
||||||
return OpCode(code[udest]) == JUMPDEST && m.codeSegment(udest)
|
return OpCode(code[udest]) == JUMPDEST && m.codeSegment(udest)
|
||||||
@ -61,9 +61,9 @@ func (bits *bitvec) codeSegment(pos uint64) bool {
|
|||||||
return ((*bits)[pos/8] & (0x80 >> (pos % 8))) == 0
|
return ((*bits)[pos/8] & (0x80 >> (pos % 8))) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// jumpdests creates a map that contains an entry for each
|
// jumpdests creates a bitmap of the code, where 1 represents a DATA-segment,
|
||||||
// PC location that is a JUMPDEST instruction.
|
// and 0 represents code-segment
|
||||||
func jumpdests(code []byte) []byte {
|
func codeBitmap(code []byte) []byte {
|
||||||
//The map is 4 bytes longer than necessary, in case the code
|
//The map is 4 bytes longer than necessary, in case the code
|
||||||
// ends with a PUSH32, the algorithm will push zeroes onto the
|
// ends with a PUSH32, the algorithm will push zeroes onto the
|
||||||
// bitvector outside the bounds of the actual code.
|
// bitvector outside the bounds of the actual code.
|
||||||
|
@ -28,7 +28,7 @@ func TestJumpDestAnalysis(t *testing.T) {
|
|||||||
{[]byte{byte(PUSH32)}, 0xFF, 2},
|
{[]byte{byte(PUSH32)}, 0xFF, 2},
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
ret := jumpdests(test.code)
|
ret := codeBitmap(test.code)
|
||||||
if ret[test.which] != test.exp {
|
if ret[test.which] != test.exp {
|
||||||
t.Fatalf("expected %x, got %02x", test.exp, ret[test.which])
|
t.Fatalf("expected %x, got %02x", test.exp, ret[test.which])
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user