diff options
Diffstat (limited to 'src/DebuggerKit')
| -rw-r--r-- | src/DebuggerKit/dk-nk-osx.json (renamed from src/DebuggerKit/dk-nekernel.json) | 3 | ||||
| -rw-r--r-- | src/DebuggerKit/dk-nk-posix.json | 19 | ||||
| -rw-r--r-- | src/DebuggerKit/dk-osx.json | 4 | ||||
| l--------- | src/DebuggerKit/dk-posix.json | 1 | ||||
| -rw-r--r-- | src/DebuggerKit/src/MachContractCLI.cpp | 95 | ||||
| -rw-r--r-- | src/DebuggerKit/src/NeKernelContract.cpp | 5 | ||||
| -rw-r--r-- | src/DebuggerKit/src/NeKernelContractCLI.cpp | 3 | ||||
| -rw-r--r-- | src/DebuggerKit/src/POSIXMachContractCLI.cpp | 7 |
8 files changed, 123 insertions, 14 deletions
diff --git a/src/DebuggerKit/dk-nekernel.json b/src/DebuggerKit/dk-nk-osx.json index 4ada191..a5ff85e 100644 --- a/src/DebuggerKit/dk-nekernel.json +++ b/src/DebuggerKit/dk-nk-osx.json @@ -11,7 +11,8 @@ "cpp_macros": [ "__NECTAR__=202505", "DK_USE_STRUCTS=1", - "DK_NEKERNEL_DEBUGGER", + "DK_NEKERNEL_DEBUGGER=1", + "DEBUGGERKIT_LIBSYSTEM=1", "kDistReleaseBranch=$(git rev-parse --abbrev-ref HEAD)-$(uuidgen)" ] } diff --git a/src/DebuggerKit/dk-nk-posix.json b/src/DebuggerKit/dk-nk-posix.json new file mode 100644 index 0000000..8c87769 --- /dev/null +++ b/src/DebuggerKit/dk-nk-posix.json @@ -0,0 +1,19 @@ +{ + "compiler_path": "clang++", + "compiler_std": "c++20", + "headers_path": [ + "../../include/DebuggerKit", + "../../include" + ], + "sources_path": ["src/*.cpp"], + "output_name": "/usr/lib/libDebuggerKit.so", + "compiler_flags": ["-fPIC", "-shared"], + "cpp_macros": [ + "__NECTAR__=202505", + "DK_USE_STRUCTS=1", + "DK_NEKERNEL_DEBUGGER=1", + "DEBUGGERKIT_LIBSYSTEM=1", + "kDistReleaseBranch=$(git rev-parse --abbrev-ref HEAD)-$(uuidgen)" + ] +} + diff --git a/src/DebuggerKit/dk-osx.json b/src/DebuggerKit/dk-osx.json index f97f758..c605efc 100644 --- a/src/DebuggerKit/dk-osx.json +++ b/src/DebuggerKit/dk-osx.json @@ -11,8 +11,8 @@ "cpp_macros": [ "__NECTAR__=202505", "CK_USE_STRUCTS=1", - "DEBUGGERKIT_POSIX", - "DK_MACH_DEBUGGER", + "DEBUGGERKIT_POSIX=1", + "DK_MACH_DEBUGGER=1", "kDistReleaseBranch=$(git rev-parse --abbrev-ref HEAD)-$(uuidgen)" ] } diff --git a/src/DebuggerKit/dk-posix.json b/src/DebuggerKit/dk-posix.json deleted file mode 120000 index 2a8c729..0000000 --- a/src/DebuggerKit/dk-posix.json +++ /dev/null @@ -1 +0,0 @@ -dk-osx.json
\ No newline at end of file diff --git a/src/DebuggerKit/src/MachContractCLI.cpp b/src/DebuggerKit/src/MachContractCLI.cpp new file mode 100644 index 0000000..4d0c4e8 --- /dev/null +++ b/src/DebuggerKit/src/MachContractCLI.cpp @@ -0,0 +1,95 @@ +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (See accompanying +// file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0) +// Official repository: https://github.com/nekernel-org/nectar + +#ifdef DK_MACH_DEBUGGER + +#include <DebuggerKit/POSIXMachContract.h> +#include <ThirdParty/Dialogs/Dialogs.h> + +#ifdef DK_MACH_DEBUGGER +#include <DebuggerKit/Common.inl> + +/// @internal +/// @brief Handles CTRL-C signal on debugger. +static Void dbgi_ctrlc_handler(std::int32_t _) { + if (!kPID) { + return; + } + + kUserDebugger.Break(); + + pfd::notify("Debugger Event", "Breakpoint hit!"); + + kKeepRunning = false; +} + +NECTAR_MODULE(DebuggerMachPOSIX) { + pfd::notify( + "Debugger Event", + "Userland Debugger\n(C) 2025 Amlal El Mahrouss, licensed under the Apache 2.0 license."); + + if (argc >= 3 && std::string(argv[1]) == "-p" && argv[2] != nullptr) { + kPath = argv[2]; + kUserDebugger.SetPath(kPath); + + kStdOut << "[+] Image set to: " << kPath << "\n"; + } else { + kStdOut << "usage: " << argv[0] << " -p <path>\n"; + kStdOut << "example: " << argv[0] << " -p </path/to/program>\n"; + + return EXIT_FAILURE; + } + + CompilerKit::install_signal(SIGINT, dbgi_ctrlc_handler); + + while (YES) { + if (kKeepRunning) { + continue; + } + + std::string cmd; + if (!std::getline(std::cin, cmd)) break; + + if (cmd == "c" || cmd == "cont" || cmd == "continue") { + if (kUserDebugger.Continue()) { + kKeepRunning = true; + + kStdOut << "[+] Continuing...\n"; + + pfd::notify("Debugger Event", "Continuing..."); + } + } + + if (cmd == "d" || cmd == "detach") kUserDebugger.Detach(); + + if (cmd == "start") { + kStdOut << "[?] Enter a argument to use: "; + std::getline(std::cin, cmd); + + kUserDebugger.Attach(kPath, cmd, kPID); + } + + if (cmd == "exit") { + if (kPID > 0) kUserDebugger.Detach(); + + break; + } + + if (cmd == "break" || cmd == "b") { + kStdOut << "[?] Enter a symbol to break on: "; + + std::getline(std::cin, cmd); + + if (kUserDebugger.BreakAt(cmd)) { + pfd::notify("Debugger Event", "Add BreakAt at: " + cmd); + } + } + } + + return EXIT_SUCCESS; +} +#endif + +#endif diff --git a/src/DebuggerKit/src/NeKernelContract.cpp b/src/DebuggerKit/src/NeKernelContract.cpp index f39ba0d..f662401 100644 --- a/src/DebuggerKit/src/NeKernelContract.cpp +++ b/src/DebuggerKit/src/NeKernelContract.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (See accompanying // file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0) // Official repository: https://github.com/nekernel-org/nectar @@ -8,8 +8,6 @@ /// @author Amlal El Mahrouss /// @brief Kernel Debugger Protocol -#include <CompilerKit/Detail/Config.h> -#include <DebuggerKit/Detail/Config.h> #include <DebuggerKit/NeKernelContract.h> #include <ThirdParty/Dialogs/Dialogs.h> @@ -17,7 +15,6 @@ using namespace DebuggerKit::Detail; using namespace DebuggerKit::NeKernel; NeKernelContract::NeKernelContract() = default; - NeKernelContract::~NeKernelContract() = default; bool NeKernelContract::Attach(CompilerKit::STLString path, CompilerKit::STLString argv, diff --git a/src/DebuggerKit/src/NeKernelContractCLI.cpp b/src/DebuggerKit/src/NeKernelContractCLI.cpp index e1b6a27..b5e07a2 100644 --- a/src/DebuggerKit/src/NeKernelContractCLI.cpp +++ b/src/DebuggerKit/src/NeKernelContractCLI.cpp @@ -1,11 +1,10 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (See accompanying // file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0) // Official repository: https://github.com/nekernel-org/nectar #ifdef DK_NEKERNEL_DEBUGGER -#include <CompilerKit/Detail/Config.h> #include <DebuggerKit/NeKernelContract.h> #include <ThirdParty/Dialogs/Dialogs.h> #include <string> diff --git a/src/DebuggerKit/src/POSIXMachContractCLI.cpp b/src/DebuggerKit/src/POSIXMachContractCLI.cpp index dd1411c..da90a1f 100644 --- a/src/DebuggerKit/src/POSIXMachContractCLI.cpp +++ b/src/DebuggerKit/src/POSIXMachContractCLI.cpp @@ -1,12 +1,11 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (See accompanying // file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0) // Official repository: https://github.com/nekernel-org/nectar #ifdef DK_MACH_DEBUGGER -#include <CompilerKit/Detail/Config.h> -#include <DebuggerKit/POSIXMachContract.h> +#include <DebuggerKit/MachContract.h> #include <ThirdParty/Dialogs/Dialogs.h> #ifdef DK_MACH_DEBUGGER @@ -14,7 +13,7 @@ /// @internal /// @brief Handles CTRL-C signal on debugger. -static void dbgi_ctrlc_handler(std::int32_t _) { +static Void dbgi_ctrlc_handler(std::int32_t _) { if (!kPID) { return; } |
