[Lldb-commits] [PATCH] D128292: [lldb/Fuzzer] Add command interpreter fuzzer for LLDB
Chelsea Cassanova via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 22 07:38:35 PDT 2022
cassanova updated this revision to Diff 439021.
cassanova added a comment.
Updated ASCII header to work with 80-column limit.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128292/new/
https://reviews.llvm.org/D128292
Files:
lldb/tools/lldb-fuzzer/CMakeLists.txt
lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/CMakeLists.txt
lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/inputdictionary.txt
lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/lldb-commandinterpreter-fuzzer.cpp
Index: lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/lldb-commandinterpreter-fuzzer.cpp
===================================================================
--- /dev/null
+++ lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/lldb-commandinterpreter-fuzzer.cpp
@@ -0,0 +1,47 @@
+//===-- lldb-commandinterpreter-fuzzer.cpp -------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===---------------------------------------------------------------------===//
+
+#include <string>
+
+#include "lldb/API/SBCommandInterpreter.h"
+#include "lldb/API/SBCommandInterpreterRunOptions.h"
+#include "lldb/API/SBCommandReturnObject.h"
+#include "lldb/API/SBDebugger.h"
+#include "lldb/API/SBTarget.h"
+
+using namespace lldb;
+
+extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
+ SBDebugger::Initialize();
+ return 0;
+}
+
+extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
+ // Convert the data into a null-terminated string
+ std::string str((char *)data, size);
+
+ // Create a debugger and a dummy target
+ SBDebugger debugger = SBDebugger::Create(false);
+ SBTarget target = debugger.GetDummyTarget();
+
+ // Create a command interpreter for the current debugger
+ // A return object is needed to run the command interpreter
+ SBCommandReturnObject ro = SBCommandReturnObject();
+ SBCommandInterpreter ci = debugger.GetCommandInterpreter();
+
+ // Use the fuzzer generated input as input for the command interpreter
+ if (ci.IsValid()) {
+ ci.HandleCommand(str.c_str(), ro, false);
+ }
+
+ debugger.DeleteTarget(target);
+ SBDebugger::Destroy(debugger);
+ SBModule::GarbageCollectAllocatedModules();
+
+ return 0;
+}
Index: lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/inputdictionary.txt
===================================================================
--- /dev/null
+++ lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/inputdictionary.txt
@@ -0,0 +1,4 @@
+kw1="breakpoint set"
+kw2="target"
+kw3="run"
+kw4="frame info"
Index: lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/CMakeLists.txt
@@ -0,0 +1,22 @@
+set(LLVM_LINK_COMPONENTS
+ Support
+ )
+
+add_llvm_fuzzer(lldb-commandinterpreter-fuzzer
+ EXCLUDE_FROM_ALL
+ lldb-commandinterpreter-fuzzer.cpp
+ )
+
+if(TARGET lldb-commandinterpreter-fuzzer)
+ target_include_directories(lldb-commandinterpreter-fuzzer PRIVATE ..)
+ target_link_libraries(lldb-commandinterpreter-fuzzer
+ PRIVATE
+ liblldb
+ )
+
+ add_custom_target(fuzz-lldb-commandinterpreter
+ COMMENT "Running the LLDB command interpreter fuzzer..."
+ COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && $<TARGET_FILE:lldb-commandinterpreter-fuzzer> -dict=${CMAKE_CURRENT_SOURCE_DIR}/inputdictionary.txt -only_ascii=1
+ USES_TERMINAL
+ )
+endif()
Index: lldb/tools/lldb-fuzzer/CMakeLists.txt
===================================================================
--- lldb/tools/lldb-fuzzer/CMakeLists.txt
+++ lldb/tools/lldb-fuzzer/CMakeLists.txt
@@ -1,2 +1,3 @@
+add_subdirectory(lldb-commandinterpreter-fuzzer)
add_subdirectory(lldb-target-fuzzer)
add_subdirectory(utils)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D128292.439021.patch
Type: text/x-patch
Size: 3437 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220622/0080cac1/attachment.bin>
More information about the lldb-commits
mailing list