What is FuzzIL and how does it work?
mainFuzzIL is a custom intermediate language that serves as the foundation for Fuzzilli. Instead of generating JavaScript directly, Fuzzilli operates exclusively on FuzzIL programs, which are only lifted to JavaScript at the final stage for execution.
This approach ensures:
- Syntactical Correctness: FuzzIL can only express code that is guaranteed to be syntactically valid JavaScript.
- Semantic Correctness: It helps ensure variables are defined before use and facilitates meaningful mutations.
- Ease of Lifting: It is designed to be easily converted into JavaScript by the
JavaScriptLifter.
FuzzIL programs are essentially lists of instructions where every instruction is an operation with input/output variables and optional parameters. Control flow is managed through 'blocks' (e.g., BeginIf, EndIf).