summaryrefslogtreecommitdiffhomepage
path: root/src/DebuggerKit
diff options
context:
space:
mode:
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.json19
-rw-r--r--src/DebuggerKit/dk-osx.json4
l---------src/DebuggerKit/dk-posix.json1
-rw-r--r--src/DebuggerKit/src/MachContractCLI.cpp95
-rw-r--r--src/DebuggerKit/src/NeKernelContract.cpp5
-rw-r--r--src/DebuggerKit/src/NeKernelContractCLI.cpp3
-rw-r--r--src/DebuggerKit/src/POSIXMachContractCLI.cpp7
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;
}