Dear libFuzzer developers,
I’m about to start using the libFuzzer and I’d like to know an answer to a few question before I begin.
(1) Can libFuzzer be efficiently used to test the programs with the structured inputs? If so, how is this structure/file format is specified to the libFuzzer (if possible, please point me to the documentation). To elaborate my question a little more, I will give an example. Let’s say we want to fuzz elf object file dumper (not that I’m going to fuzz it, it just a good example). If libFuzzer starts generating random ELF files, we might not test much, since almost any input will be quickly rejected. However, if libFuzzer could be taught that the input buffer is actually is a structure, where the first section is a header (which is a structure itself), followed by program header section, followed by .text section, followed by .data section, etc. Instead of fuzzing the whole input buffer it will be more efficiently fuzz only one or more section/subsection of the buffer. Can I do it? If so, how?
(2) One more question related to question #1. Can libFuzzer be taught to generate inputs, where some pre-determined part of this input will *always* contain the same value (and basically never fuzz this value). Let’s look at ELF obj file dumper as an example again. Each ELF file starts with the 4 byte long magic number in its header. If this magic number is fuzzed/altered, the obj file dumper fuzzer won’t testing anything useful, since objdumper will immediately reports an error and exits. Though thinking about it, fuzz target might merge this pre-determined value with the rest of the fuzzed buffer itself before doing any useful work on it. However, it’s nice to find out if there is an easy existing approach to this problem.
(3) Will libFuzzer work efficiently for fuzzing JavaScript engine (i.e. if a large set of super-small conformance JavaScript tests are added to the corpus, what are the chances that the fuzzer will be successful in creating interesting valid/invalid test cases)? Out of curiosity, but have you tried efficiently fuzz C/C++ front-end with libFuzzer?
Katya.
Dear libFuzzer developers,
I’m about to start using the libFuzzer and I’d like to know an answer to a few question before I begin.
(1) Can libFuzzer be efficiently used to test the programs with the structured inputs?
If so, how is this structure/file format is specified to the libFuzzer (if possible, please point me to the documentation).
To elaborate my question a little more, I will give an example. Let’s say we want to fuzz elf object file dumper (not that I’m going to fuzz it, it just a good example). If libFuzzer starts generating random ELF files, we might not test much, since almost any input will be quickly rejected. However, if libFuzzer could be taught that the input buffer is actually is a structure, where the first section is a header (which is a structure itself), followed by program header section, followed by .text section, followed by .data section, etc. Instead of fuzzing the whole input buffer it will be more efficiently fuzz only one or more section/subsection of the buffer. Can I do it? If so, how?
(2) One more question related to question #1. Can libFuzzer be taught to generate inputs, where some pre-determined part of this input will *always* contain the same value (and basically never fuzz this value).
Let’s look at ELF obj file dumper as an example again. Each ELF file starts with the 4 byte long magic number in its header. If this magic number is fuzzed/altered, the obj file dumper fuzzer won’t testing anything useful, since objdumper will immediately reports an error and exits. Though thinking about it, fuzz target might merge this pre-determined value with the rest of the fuzzed buffer itself before doing any useful work on it. However, it’s nice to find out if there is an easy existing approach to this problem.
(3) Will libFuzzer work efficiently for fuzzing JavaScript engine (i.e. if a large set of super-small conformance JavaScript tests are added to the corpus, what are the chances that the fuzzer will be successful in creating interesting valid/invalid test cases)?
Out of curiosity, but have you tried efficiently fuzz C/C++ front-end with libFuzzer?