1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <stddef.h> 6 #include <stdint.h> 7 8 #include "base/logging.h" 9 #include "components/zucchini/buffer_view.h" 10 #include "components/zucchini/disassembler.h" 11 #include "components/zucchini/disassembler_elf.h" 12 #include "components/zucchini/fuzzers/fuzz_utils.h" 13 14 namespace { 15 16 struct Environment { Environment__anon83de26c80111::Environment17 Environment() { logging::SetMinLogLevel(logging::LOG_FATAL); } 18 }; 19 20 } // namespace 21 LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)22extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { 23 static Environment env; 24 if (!size) 25 return 0; 26 // Prepare data. 27 std::vector<uint8_t> mutable_data(data, data + size); 28 zucchini::ConstBufferView image(mutable_data.data(), mutable_data.size()); 29 30 // Create disassembler. Early exit on failure. 31 auto disassembler_elf_x64 = 32 zucchini::Disassembler::Make<zucchini::DisassemblerElfX64>(image); 33 if (disassembler_elf_x64) { 34 zucchini::ReadAndWriteReferences(std::move(disassembler_elf_x64), 35 &mutable_data); 36 return 0; 37 } 38 39 auto disassembler_elf_x86 = 40 zucchini::Disassembler::Make<zucchini::DisassemblerElfX86>(image); 41 if (disassembler_elf_x86) 42 zucchini::ReadAndWriteReferences(std::move(disassembler_elf_x86), 43 &mutable_data); 44 return 0; 45 } 46