summaryrefslogtreecommitdiffhomepage
path: root/dev/LibDebugger
diff options
context:
space:
mode:
Diffstat (limited to 'dev/LibDebugger')
-rw-r--r--dev/LibDebugger/CommonCLI.inl18
-rw-r--r--dev/LibDebugger/NeKernelContract.h30
-rw-r--r--dev/LibDebugger/POSIXMachContract.h2
-rw-r--r--dev/LibDebugger/Version.h15
-rw-r--r--dev/LibDebugger/src/NeKernelContract.cc44
-rw-r--r--dev/LibDebugger/src/NeKernelContractCLI.cc42
-rw-r--r--dev/LibDebugger/src/POSIXMachContractCLI.cc (renamed from dev/LibDebugger/src/POSIXMachContract.cc)21
7 files changed, 147 insertions, 25 deletions
diff --git a/dev/LibDebugger/CommonCLI.inl b/dev/LibDebugger/CommonCLI.inl
new file mode 100644
index 0000000..01bbb82
--- /dev/null
+++ b/dev/LibDebugger/CommonCLI.inl
@@ -0,0 +1,18 @@
+
+static BOOL kKeepRunning = false;
+
+#ifdef LD_NEKERNEL_DEBUGGER
+static LibDebugger::NeKernel::NeKernelContract kKernelDebugger;
+#else
+static LibDebugger::POSIX::POSIXMachContract kDebugger;
+#endif
+
+static LibDebugger::ProcessID kPID = 0L;
+static LibDebugger::CAddress kActiveAddress = nullptr;
+static std::string kPath = "";
+
+#define kBlank "\e[0;30m"
+#define kRed "\e[0;31m"
+#define kWhite "\e[0;97m"
+
+#define kStdOut (std::cout << kRed << "dbg: " << kWhite)
diff --git a/dev/LibDebugger/NeKernelContract.h b/dev/LibDebugger/NeKernelContract.h
index 8e54ab2..78140e7 100644
--- a/dev/LibDebugger/NeKernelContract.h
+++ b/dev/LibDebugger/NeKernelContract.h
@@ -6,6 +6,8 @@
#ifndef LD_NEKERNEL_CONTRACT_H
#define LD_NEKERNEL_CONTRACT_H
+#ifdef LD_NEKERNEL_DEBUGGER
+
#include <LibDebugger/DebuggerContract.h>
#include <sys/socket.h>
@@ -29,35 +31,43 @@ namespace LibDebugger::NeKernel {
class NeKernelContract;
namespace Detail {
- class NeKernelPortHeader;
+ class NeKernelDebugHeader;
inline constexpr size_t kDebugTypeLen = 256U;
typedef char rt_debug_type[kDebugTypeLen];
- class NeKernelPortHeader final {
+ class NeKernelDebugHeader final {
public:
- int16_t fPort;
- int16_t fPortBsy;
+ int16_t fPort;
+ int16_t fPortKind;
+ rt_debug_type fPortBlob;
};
} // namespace Detail
class NeKernelContract : public DebuggerContract {
public:
NeKernelContract();
- virtual ~NeKernelContract();
+ ~NeKernelContract() override;
+
+ public:
+ NeKernelContract& operator=(const NeKernelContract&) = default;
+ NeKernelContract(const NeKernelContract&) = default;
// Override additional methods from DebuggerContract
- virtual bool Attach(std::string path, std::string argv, ProcessID& pid) noexcept override;
- virtual bool Breakpoint(std::string symbol) noexcept override;
- virtual bool Break() noexcept override;
- virtual bool Continue() noexcept override;
- virtual bool Detach() noexcept override;
+ bool Attach(std::string path, std::string argv, ProcessID& pid) noexcept override;
+ bool Breakpoint(std::string symbol) noexcept override;
+ bool Break() noexcept override;
+ bool Continue() noexcept override;
+ bool Detach() noexcept override;
private:
std::string m_ip_address;
std::string m_port;
+ int64_t m_socket{0};
};
} // namespace LibDebugger::NeKernel
+#endif // ifdef LD_NEKERNEL_DEBUGGER
+
#endif // LD_NEKERNEL_CONTRACT_H \ No newline at end of file
diff --git a/dev/LibDebugger/POSIXMachContract.h b/dev/LibDebugger/POSIXMachContract.h
index 5904cd2..1d7561a 100644
--- a/dev/LibDebugger/POSIXMachContract.h
+++ b/dev/LibDebugger/POSIXMachContract.h
@@ -4,7 +4,7 @@
#pragma once
-#ifdef __APPLE__
+#ifdef LD_MACH_DEBUGGER
/// @file POSIXMachContract.h
/// @brief POSIX Mach debugger.
diff --git a/dev/LibDebugger/Version.h b/dev/LibDebugger/Version.h
new file mode 100644
index 0000000..4159191
--- /dev/null
+++ b/dev/LibDebugger/Version.h
@@ -0,0 +1,15 @@
+/* -------------------------------------------
+
+ Copyright (C) 2025 Amlal EL Mahrouss, all rights reserved
+
+------------------------------------------- */
+
+#pragma once
+
+#define kDistVersion "v0.0.1-libdebugger"
+#define kDistVersionBCD 0x0001
+
+#define ToString(X) Stringify(X)
+#define Stringify(X) #X
+
+#define kDistRelease ToString(kDistReleaseBranch)
diff --git a/dev/LibDebugger/src/NeKernelContract.cc b/dev/LibDebugger/src/NeKernelContract.cc
new file mode 100644
index 0000000..33c0c48
--- /dev/null
+++ b/dev/LibDebugger/src/NeKernelContract.cc
@@ -0,0 +1,44 @@
+/***
+ LibDebugger
+ (C) 2025 Amlal El Mahrouss
+ File: NeKernelContract.cc
+ Purpose: NeKernel Debugger
+*/
+
+#ifdef LD_NEKERNEL_DEBUGGER
+
+#include <LibCompiler/Defines.h>
+#include <LibDebugger/NeKernelContract.h>
+#include <Vendor/Dialogs.h>
+
+#include <cstdint>
+#include <iostream>
+#include <string>
+
+using namespace LibDebugger::NeKernel;
+
+NeKernelContract::NeKernelContract() = default;
+
+NeKernelContract::~NeKernelContract() = default;
+
+bool NeKernelContract::Attach(std::string path, std::string argv, ProcessID& pid) noexcept {
+ return false;
+}
+
+bool NeKernelContract::Breakpoint(std::string symbol) noexcept {
+ return false;
+}
+
+bool NeKernelContract::Break() noexcept {
+ return false;
+}
+
+bool NeKernelContract::Continue() noexcept {
+ return false;
+}
+
+bool NeKernelContract::Detach() noexcept {
+ return false;
+}
+
+#endif // LD_NEKERNEL_DEBUGGER \ No newline at end of file
diff --git a/dev/LibDebugger/src/NeKernelContractCLI.cc b/dev/LibDebugger/src/NeKernelContractCLI.cc
new file mode 100644
index 0000000..0107b7c
--- /dev/null
+++ b/dev/LibDebugger/src/NeKernelContractCLI.cc
@@ -0,0 +1,42 @@
+/***
+ LibDebugger
+ (C) 2025 Amlal El Mahrouss
+ File: NeKernelContract.cc
+ Purpose: NeKernel Debugger CLI.
+*/
+
+#ifdef LD_NEKERNEL_DEBUGGER
+
+#include <LibCompiler/Defines.h>
+#include <LibDebugger/NeKernelContract.h>
+#include <Vendor/Dialogs.h>
+
+#include <cstdint>
+#include <iostream>
+#include <string>
+
+#include <LibDebugger/CommonCLI.inl>
+
+using namespace LibDebugger::NeKernel;
+
+LIBCOMPILER_MODULE(DebuggerNeKernel) {
+ pfd::notify("Debugger Event",
+ "Kernel Debugger\n(C) 2025 Amlal El Mahrouss, all rights reserved.");
+
+ if (argc >= 3 && std::string(argv[1]) == "-k" && argv[2] != nullptr) {
+ kPath = argv[2];
+ kStdOut << "[+] Kernel (ne_kernel) set to: " << kPath << "\n";
+
+ kKernelDebugger.Attach(kPath, nullptr, kPID);
+ kKernelDebugger.Breakpoint("$HANDOVER_START");
+
+ return EXIT_SUCCESS;
+ }
+
+ kStdOut << "Usage: " << argv[0] << " -k <kernel_path>\n";
+ kStdOut << "Example: " << argv[0] << " -k /path/to/ne_kernel\n";
+
+ return EXIT_FAILURE;
+}
+
+#endif // LD_NEKERNEL_DEBUGGER \ No newline at end of file
diff --git a/dev/LibDebugger/src/POSIXMachContract.cc b/dev/LibDebugger/src/POSIXMachContractCLI.cc
index 2753e9a..90cebc3 100644
--- a/dev/LibDebugger/src/POSIXMachContract.cc
+++ b/dev/LibDebugger/src/POSIXMachContractCLI.cc
@@ -1,8 +1,11 @@
/***
+ LibDebugger
(C) 2025 Amlal El Mahrouss
- */
+ File: POSIXMachContract.cc
+ Purpose: OS X/Darwin Debugger
+*/
-#ifdef __APPLE__
+#ifdef LD_MACH_DEBUGGER
#include <LibCompiler/Defines.h>
#include <LibDebugger/POSIXMachContract.h>
@@ -11,17 +14,7 @@
#include <iostream>
#include <string>
-static BOOL kKeepRunning = false;
-static LibDebugger::POSIX::POSIXMachContract kDebugger;
-static LibDebugger::ProcessID kPID = 0L;
-static LibDebugger::CAddress kActiveAddress = nullptr;
-static std::string kPath = "";
-
-#define kBlank "\e[0;30m"
-#define kRed "\e[0;31m"
-#define kWhite "\e[0;97m"
-
-#define kStdOut (std::cout << kRed << "dbg: " << kWhite)
+#include <LibDebugger/CommonCLI.inl>
/// @internal
/// @brief Handles CTRL-C signal on debugger.
@@ -47,7 +40,7 @@ LIBCOMPILER_MODULE(DebuggerMachPOSIX) {
kPath = argv[2];
kDebugger.SetPath(kPath);
- kStdOut << "[+] Path set to: " << kPath << "\n";
+ kStdOut << "[+] Image set to: " << kPath << "\n";
}
::signal(SIGINT, dbgi_ctrlc_handler);