48 lines · cpp
1//===-- lldb-commandinterpreter-fuzzer.cpp -------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===---------------------------------------------------------------------===//8 9#include <string>10 11#include "lldb/API/SBCommandInterpreter.h"12#include "lldb/API/SBCommandInterpreterRunOptions.h"13#include "lldb/API/SBCommandReturnObject.h"14#include "lldb/API/SBDebugger.h"15#include "lldb/API/SBTarget.h"16 17using namespace lldb;18 19extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {20 SBDebugger::Initialize();21 return 0;22}23 24extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {25 // Convert the data into a null-terminated string26 std::string str((char *)data, size);27 28 // Create a debugger and a dummy target29 SBDebugger debugger = SBDebugger::Create(false);30 SBTarget target = debugger.GetDummyTarget();31 32 // Create a command interpreter for the current debugger33 // A return object is needed to run the command interpreter34 SBCommandReturnObject ro = SBCommandReturnObject();35 SBCommandInterpreter ci = debugger.GetCommandInterpreter();36 37 // Use the fuzzer generated input as input for the command interpreter38 if (ci.IsValid()) {39 ci.HandleCommand(str.c_str(), ro, false);40 }41 42 debugger.DeleteTarget(target);43 SBDebugger::Destroy(debugger);44 SBModule::GarbageCollectAllocatedModules();45 46 return 0;47}48