You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hey, I just added Control Flow Graph (CFG) support to my evmole tool and included benchmarks for several open-source tools I found: CFG Benchmark Results
While SEVM performs very well for selectors/mutability (and for decompilation, though it's not benchmarked), it performs poorly in the CFG benchmark. I suspect I might be using it incorrectly.
The expected output format is a list of edges between basic blocks, where each block is identified by the bytecode offset of its first opcode. Let me know if I'm misusing SEVM or if there's an alternative way to get accurate CFG results.
The text was updated successfully, but these errors were encountered:
Hey thanks for opening this. Great work with your evmole tool!
I'm at EthDenver this week, but I'll take a look when I have some time.
it performs poorly in the CFG benchmark
It might yes, sevm is not precise in terms of CFG generation. It does loop unroll, so that may lead to different CFGs.
a list of edges between basic blocks, where each block is identified by the bytecode offset of its first opcode
sevm performs basic block cloning. That means that two different basic blocks can have the same offset as id. This is because a single JUMP(I) instruction can have multiple destinations.
Hey, I just added Control Flow Graph (CFG) support to my evmole tool and included benchmarks for several open-source tools I found:
CFG Benchmark Results
While SEVM performs very well for selectors/mutability (and for decompilation, though it's not benchmarked), it performs poorly in the CFG benchmark. I suspect I might be using it incorrectly.
Could you take a look at this part of the implementation? https://github.com/cdump/evmole/blob/master/benchmark/providers/sevm/main.mjs#L44
The expected output format is a list of edges between basic blocks, where each block is identified by the bytecode offset of its first opcode. Let me know if I'm misusing SEVM or if there's an alternative way to get accurate CFG results.
The text was updated successfully, but these errors were encountered: