Proto commits in RUB-SysSec/JIT-Picker

These 48 commits are when the Protocol Buffers files have changed:

Commit:19db34f
Author:Lukas Bernhard
Committer:Lukas Bernhard

Add differential testing

The documentation is generated from this commit.

Commit:e54fd1b
Author:Samuel Groß
Committer:Samuel Groß

Remove runtime type collection support This feature is essentially replaced by the ExplorationMutator which also uses runtime type information but instead of forwarding it to Fuzzilli (which then later on selects actions to perform based on the type), it directly selects a "useful" action to perform. This is a lot simpler and easier to maintain as the complexity is contained in a single mutator instead of being spread throughout the codebase.

Commit:62a5c80
Author:Samuel Groß
Committer:Samuel Groß

Implement ExplorationMutator Quoting from the documentation: This mutator does the following: 1. it inserts Explore operations for random existing variables in the program to be mutated 2. It executes the resulting (temporary) program. The Explore operations will be lifted to a sequence of code that inspects the variable at runtime (using features like 'typeof' and 'Object.getOwnPropertyNames' in JavaScript) and selects a "useful" operation to perform on it (e.g. load a property, call a method, ...), then reports back what it did 3. the mutator processes the output of step 2 and replaces some of the Explore mutations with the concrete action that was selected at runtime. All other Explore operations are discarded. The result is a program that performs useful actions on some of the existing variables even without statically knowing their type. The resulting program is also deterministic and "JIT friendly" as it no longer relies on any kind of runtime object inspection.

Commit:3fef2fb
Author:Samuel Groß

Make operation names and ProgramBuilder methods more consistent Now, for a simple operation OperationXYZ, the ProgramBuilder will generally have a method opXYZ(...), while for block operations BeginBlockXYZ and EndBlockXYZ, it will have a buildBlockXYZ(...) method with ensures that the begin and end operations always match.

Commit:a5ba4d1
Author:Samuel Groß

Compute correctness and timeout rate over last 1000 samples Now that we do initial corpus generation with a different fuzzing engine, these statistics are somewhat skewed, at least during early fuzzing. Computing them over the last 1000 samples mitigates that.

Commit:688eb07
Author:Samuel Groß
Committer:Samuel Groß

Split call/construct operations into plain and spreading variants Spreading operations are not very "mutation friendly" since spreading rarely causes new interesting behaviour and will frequently cause invalid programs as only iterable objects can be spread. Therefore we now split up the CallFunction, Construct, CallMethod, and CallComputedMethod into "plain" versions and spreading versions which have the "WithSpread" suffix.

Commit:8d1e575
Author:Samuel Groß

Implement minimization and mutation of variadic instructions With this change, the Minimizer is now able to remove variadic inputs from instructions and the OperationMutations is able to add variadic inputs to them. To measure the impact of this, the average size of programs added to the corpus is now inlcluded in the statistics.

Commit:c1a3848
Author:Amar Menezes
Committer:GitHub

Replace Types with Parameters in Function Signatures (#314)

Commit:30ab226
Author:Amar Menezes
Committer:GitHub

Add DestructObject and DestructObjectAndReassign operations (#309)

Commit:7d764f1
Author:Amar Menezes
Committer:GitHub

simplify switch statement generation (#216)

Commit:cde2e15
Author:Amar Menezes
Committer:GitHub

CallSuperConstructor now supports spread arguments (#302)

Commit:1335348
Author:Amar Menezes
Committer:GitHub

Add array destruct support to ForOf (#303)

Commit:c41b205
Author:Amar Menezes
Committer:GitHub

Add DestructArray and DestructArrayAndReassign operations (#300)

Commit:7324bf6
Author:Amar Menezes
Committer:GitHub

Add binary operation variants for StoreProperty, StoreElement, StoreComputedProperty and StoreSuperProperty (#296)

Commit:60b68c5
Author:Amar Menezes
Committer:GitHub

Implement LoadThis and LoadArguments operations (#262)

Commit:590b6b0
Author:Amar Menezes
Committer:GitHub

CallMethod, CallComputedMethod and Construct now support Spread Elements (#238)

Commit:630dab4
Author:Amar Menezes
Committer:GitHub

Implements a strict-mode toggle for Function operations (#242)

Commit:0cd2f83
Author:Amar Menezes
Committer:GitHub

add support for template literals (#208)

Commit:98298d1
Author:Amar Menezes
Committer:GitHub

Add support for switch statements (#207)

Commit:87e9142
Author:Amar Menezes
Committer:GitHub

Add assignment operators (#204)

Commit:d461c04
Author:Amar Menezes
Committer:GitHub

Add support for conditional operator (#205)

Commit:56a041e
Author:Amar Menezes
Committer:GitHub

Add CallComputedMethod operation (#200)

Commit:2e8f648
Author:Amar Menezes
Committer:GitHub

Added support for finally blocks (#196)

Commit:1408aab
Author:Samuel Groß
Committer:Samuel Groß

Added "fuzzer overhead" to statistics This represents the fraction of the total time that is not spent executing code in the target engine. It includes the time spent for things such as worker synchronization, restarting the target process after crashes or timeouts, lifting FuzzIL to the target language, performing mutations etc.

Commit:687ad52
Author:Samuel Groß
Committer:Samuel Groß

Improved shutdown logic

Commit:738b855
Author:Samuel Groß
Committer:Samuel Groß

Implemented JavaScript Classes

Commit:2ccc0c2
Author:Samuel Groß
Committer:Samuel Groß

Added inspection capabilities Currently, there are two inspection modes: History: When enabled, Fuzzilli will store the history of all programs that are added to the corpus in .fuzzil.history files. The history includes detailed information about every mutations performed on the sample and includes the program's code after every intermediate step (e.g. every execution of a mutator). Types: When enabled, Fuzzilli will output type all available type information for the programs that it writes to disk in the form of comments.

Commit:3fa75af
Author:Samuel Groß
Committer:Samuel Groß

Cache duplicate types in the protobuf format

Commit:dcacbe5
Author:Samuel Sládek
Committer:GitHub

Cache program types (#147)

Commit:0f26cb9
Author:Samuel Sládek
Committer:GitHub

Collect runtime types per instruction (#133)

Commit:1cd76bf
Author:Samuel Groß
Committer:Samuel Groß

Added unary pre and post increment and decrement operators

Commit:e9dcff6
Author:Samuel Groß
Committer:Samuel Groß

Remove Phis Now, every variable can be reassigned by a Reassign operation, without having to be explicitly marked as a "reassignable" variable. Also, the new Dup instruction can now be used to duplicate a variable.

Commit:f63197f
Author:Amar Menezes
Committer:GitHub

Add support for Async Generators (#118)

Commit:3ec31f9
Author:Amar Menezes
Committer:GitHub

Support Block Statement generation (#116)

Commit:300a953
Author:Samuel Groß

Do-While loops now have the header inputs in BeginDoWhileLoop instead of EndDoWhileLoop This removes the somewhat arbitrary restriction that inputs to block ends have to come from the outer scope, which then allowed removal of various bits of code. Also, this cleans up block and block group related code a bit by moving the algorithms into the Blocks class as static methods while making them accessible via the Program class.

Commit:7b24e1d
Author:WilliamParks
Committer:GitHub

Unary ops (#114)

Commit:d9ee3f7
Author:Amar Menezes
Committer:GitHub

Eval generator (#97)

Commit:e2d97bf
Author:Samuel Sládek
Committer:GitHub

Save runtime type collection statistics (#110)

Commit:385e8e9
Author:Samuel Sládek
Committer:GitHub

Collect basic runtime types and send them to Fuzzilli (#99)

Commit:215f158
Author:Amar Menezes
Committer:GitHub

Added support for async arrow functions (#96)

Commit:e8b7b34
Author:WilliamParks
Committer:Samuel Groß

Removes optional from type protobuf

Commit:a24e205
Author:Samuel Groß
Committer:Samuel Groß

Fuzzilli now appends the content of stderr to crashing programs as comment

Commit:baa425f
Author:Carl Smith
Committer:Carl Smith

implemented RegExp literals

Commit:f8f43cb
Author:Carl Smith
Committer:Samuel Groß

implemented bigint support

Commit:fde8373
Author:Samuel Groß
Committer:Samuel Groß

Added new function types to FuzzIL Generators and async functions are now supported.

Commit:e8b0ed2
Author:Carl Smith

implemented support for arrow functions

Commit:84babf0
Author:amarekano
Committer:Samuel Groß

Added Exponentiation and Unsigned RightShift operator

Commit:8b119db
Author:Samuel Groß
Committer:Samuel Groß

FuzzIL now uses Protobufs as serialization format This seems to roughly speed up encoding + decoding of Programs by a factor of 8, while reducing the size of the encoded data roughly by a factor of 4.