Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expand path elimination of ecfg to consider multiple blocks #64

Open
SamWilsn opened this issue Jun 18, 2021 · 0 comments
Open

Expand path elimination of ecfg to consider multiple blocks #64

SamWilsn opened this issue Jun 18, 2021 · 0 comments
Labels
A-disassembler Area: disassembler C-enhance Category: a request for an improvement E-hard Experience: difficult, probably not for the faint of heart

Comments

@SamWilsn
Copy link
Contributor

ecfg currently only considers each basic block in isolation when determining possible jump targets. It can handle constants, arithmetic, and cases where z3 can prove only certain addresses are possible (ex. pop() * 0 will always be zero.) In all other cases, ecfg is forced to assume that all jump targets are reachable.

For small handwritten programs, this naive approach is sufficient, but even the simplest solidity contract turns into an unreadable mess of paths.

The next step for ecfg is to consider the program flow as a whole, and trace execution paths starting from offset zero, building a more complete picture. In other words, to further improve the control flow graph, the inputs to each block have to come from the preceding blocks.

@SamWilsn SamWilsn added the C-enhance Category: a request for an improvement label Jun 18, 2021
@lightclient lightclient added A-disassembler Area: disassembler E-hard Experience: difficult, probably not for the faint of heart labels Jul 11, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-disassembler Area: disassembler C-enhance Category: a request for an improvement E-hard Experience: difficult, probably not for the faint of heart
Projects
None yet
Development

No branches or pull requests

2 participants