From 877de2b648ae76fa150f75269a23b8ec7476ca5f Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sun, 22 Feb 2026 06:22:26 +0100 Subject: chore: .cc to .cpp conversion, define CK_POSIX in frontends, new driver system for Nectar/C++ frontend. Signed-off-by: Amlal El Mahrouss --- src/DebuggerKit/dk-nekernel.json | 2 +- src/DebuggerKit/dk-osx.json | 2 +- src/DebuggerKit/src/NeKernelContract.cc | 89 ------------------------- src/DebuggerKit/src/NeKernelContract.cpp | 89 +++++++++++++++++++++++++ src/DebuggerKit/src/NeKernelContractCLI.cc | 99 ---------------------------- src/DebuggerKit/src/NeKernelContractCLI.cpp | 99 ++++++++++++++++++++++++++++ src/DebuggerKit/src/POSIXMachContractCLI.cc | 96 --------------------------- src/DebuggerKit/src/POSIXMachContractCLI.cpp | 96 +++++++++++++++++++++++++++ 8 files changed, 286 insertions(+), 286 deletions(-) delete mode 100644 src/DebuggerKit/src/NeKernelContract.cc create mode 100644 src/DebuggerKit/src/NeKernelContract.cpp delete mode 100644 src/DebuggerKit/src/NeKernelContractCLI.cc create mode 100644 src/DebuggerKit/src/NeKernelContractCLI.cpp delete mode 100644 src/DebuggerKit/src/POSIXMachContractCLI.cc create mode 100644 src/DebuggerKit/src/POSIXMachContractCLI.cpp (limited to 'src/DebuggerKit') diff --git a/src/DebuggerKit/dk-nekernel.json b/src/DebuggerKit/dk-nekernel.json index ca09081..4ada191 100644 --- a/src/DebuggerKit/dk-nekernel.json +++ b/src/DebuggerKit/dk-nekernel.json @@ -5,7 +5,7 @@ "../../include/DebuggerKit", "../../include" ], - "sources_path": ["src/*.cc"], + "sources_path": ["src/*.cpp"], "output_name": "/usr/local/lib/libDebuggerKit.dylib", "compiler_flags": ["-fPIC", "-shared"], "cpp_macros": [ diff --git a/src/DebuggerKit/dk-osx.json b/src/DebuggerKit/dk-osx.json index 6f619b7..f97f758 100644 --- a/src/DebuggerKit/dk-osx.json +++ b/src/DebuggerKit/dk-osx.json @@ -5,7 +5,7 @@ "../../include/DebuggerKit", "../../include" ], - "sources_path": ["src/*.cc"], + "sources_path": ["src/*.cpp"], "output_name": "/usr/local/lib/libDebuggerKit.dylib", "compiler_flags": ["-fPIC", "-shared"], "cpp_macros": [ diff --git a/src/DebuggerKit/src/NeKernelContract.cc b/src/DebuggerKit/src/NeKernelContract.cc deleted file mode 100644 index f39ba0d..0000000 --- a/src/DebuggerKit/src/NeKernelContract.cc +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2024-2025, 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 - -/// @author Amlal El Mahrouss -/// @brief Kernel Debugger Protocol - -#include -#include -#include -#include - -using namespace DebuggerKit::Detail; -using namespace DebuggerKit::NeKernel; - -NeKernelContract::NeKernelContract() = default; - -NeKernelContract::~NeKernelContract() = default; - -bool NeKernelContract::Attach(CompilerKit::STLString path, CompilerKit::STLString argv, - ProcessID& pid) noexcept { - if (path.empty() || argv.empty()) return NO; - - m_socket = ::socket(AF_INET, SOCK_STREAM, 0); - - if (m_socket == -1) return NO; - - struct sockaddr_in server_addr; - - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(kDebugPort); - - if (::inet_pton(AF_INET, argv.c_str(), &server_addr.sin_addr) <= 0) return NO; - - auto ret = (::connect(m_socket, (struct sockaddr*) &server_addr, sizeof(server_addr)) == -1); - - if (ret) return NO; - - CompilerKit::STLString pkt = Detail::kDebugMagic; - pkt += ";\r"; - - ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; - return ret; -} - -bool NeKernelContract::BreakAt(CompilerKit::STLString symbol) noexcept { - CompilerKit::STLString pkt = Detail::kDebugMagic; - pkt += ";SYM=\""; - pkt += symbol; - pkt += "\";\r"; - - if (pkt.size() > kDebugCmdLen) return NO; - - auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; - return ret; -} - -bool NeKernelContract::Break() noexcept { - CompilerKit::STLString pkt = Detail::kDebugMagic; - pkt += ";BRK=1;\r"; - - auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; - return ret; -} - -bool NeKernelContract::Continue() noexcept { - CompilerKit::STLString pkt = Detail::kDebugMagic; - pkt += ";CONT=1;\r"; - - auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; - return ret; - return NO; -} - -bool NeKernelContract::Detach() noexcept { - CompilerKit::STLString pkt = Detail::kDebugMagic; - pkt += ";DTCH=1;\r"; - - auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; - - if (ret) ::close(m_socket); - - return ret; -} - -#endif // DK_NEKERNEL_DEBUGGER diff --git a/src/DebuggerKit/src/NeKernelContract.cpp b/src/DebuggerKit/src/NeKernelContract.cpp new file mode 100644 index 0000000..f39ba0d --- /dev/null +++ b/src/DebuggerKit/src/NeKernelContract.cpp @@ -0,0 +1,89 @@ +// Copyright 2024-2025, 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 + +/// @author Amlal El Mahrouss +/// @brief Kernel Debugger Protocol + +#include +#include +#include +#include + +using namespace DebuggerKit::Detail; +using namespace DebuggerKit::NeKernel; + +NeKernelContract::NeKernelContract() = default; + +NeKernelContract::~NeKernelContract() = default; + +bool NeKernelContract::Attach(CompilerKit::STLString path, CompilerKit::STLString argv, + ProcessID& pid) noexcept { + if (path.empty() || argv.empty()) return NO; + + m_socket = ::socket(AF_INET, SOCK_STREAM, 0); + + if (m_socket == -1) return NO; + + struct sockaddr_in server_addr; + + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(kDebugPort); + + if (::inet_pton(AF_INET, argv.c_str(), &server_addr.sin_addr) <= 0) return NO; + + auto ret = (::connect(m_socket, (struct sockaddr*) &server_addr, sizeof(server_addr)) == -1); + + if (ret) return NO; + + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";\r"; + + ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; +} + +bool NeKernelContract::BreakAt(CompilerKit::STLString symbol) noexcept { + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";SYM=\""; + pkt += symbol; + pkt += "\";\r"; + + if (pkt.size() > kDebugCmdLen) return NO; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; +} + +bool NeKernelContract::Break() noexcept { + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";BRK=1;\r"; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; +} + +bool NeKernelContract::Continue() noexcept { + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";CONT=1;\r"; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + return ret; + return NO; +} + +bool NeKernelContract::Detach() noexcept { + CompilerKit::STLString pkt = Detail::kDebugMagic; + pkt += ";DTCH=1;\r"; + + auto ret = ::send(m_socket, pkt.data(), pkt.size(), 0) > 0; + + if (ret) ::close(m_socket); + + return ret; +} + +#endif // DK_NEKERNEL_DEBUGGER diff --git a/src/DebuggerKit/src/NeKernelContractCLI.cc b/src/DebuggerKit/src/NeKernelContractCLI.cc deleted file mode 100644 index e1b6a27..0000000 --- a/src/DebuggerKit/src/NeKernelContractCLI.cc +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2024-2025, 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 -#include -#include -#include - -#include - -using namespace DebuggerKit::NeKernel; - -static void dbgi_ctrlc_handler(std::int32_t _) { - if (!kPID || kPath.empty()) { - return; - } - - kKernelDebugger.Break(); - - pfd::notify("Debugger Event", "Breakpoint hit!"); - - kKeepRunning = false; -} - -NECTAR_MODULE(DebuggerNeKernel) { - pfd::notify("Debugger Event", - "Nectar Debugger\n(C) 2025 Amlal El Mahrouss and NeKernel.org contributors, all " - "rights reserved."); - - if (argc >= 5 && std::string(argv[1]) == "-k" && argv[2] != nullptr && - std::string(argv[3]) == "-ip" && argv[4] != nullptr) { - kPath = argv[2]; - kPath += ":"; - kPath += argv[4]; - - kStdOut << "[+] KIP (Kernel:IP) set to: " << kPath << "\n"; - - CompilerKit::install_signal(SIGINT, dbgi_ctrlc_handler); - - kKernelDebugger.Attach(kPath, argv[4], kPID); - - while (YES) { - if (kKeepRunning) { - continue; - } - - std::string cmd; - if (!std::getline(std::cin, cmd)) break; - - if (cmd == "c" || cmd == "cont" || cmd == "continue") { - if (kKernelDebugger.Continue()) { - kKeepRunning = true; - - kStdOut << "[+] Continuing...\n"; - - pfd::notify("Debugger Event", "Continuing..."); - } - } - - if (cmd == "d" || cmd == "detach") kKernelDebugger.Detach(); - - if (cmd == "start") { - kStdOut << "[?] Enter a argument to use: "; - std::getline(std::cin, cmd); - - kKernelDebugger.Attach(kPath, cmd, kPID); - } - - if (cmd == "exit") { - if (kPID > 0) kKernelDebugger.Detach(); - - break; - } - - if (cmd == "break" || cmd == "b") { - kStdOut << "[?] Enter a symbol to break on: "; - - std::getline(std::cin, cmd); - - if (kKernelDebugger.BreakAt(cmd)) { - pfd::notify("Debugger Event", "Add BreakAt at: " + cmd); - } - } - } - - return EXIT_SUCCESS; - } - - kStdOut << "usage: " << argv[0] << " -k -ip \n"; - kStdOut << "example: " << argv[0] << " -k /path/to/ne_kernel -ip 127.0.0.1\n"; - - return EXIT_FAILURE; -} - -#endif // DK_NEKERNEL_DEBUGGER diff --git a/src/DebuggerKit/src/NeKernelContractCLI.cpp b/src/DebuggerKit/src/NeKernelContractCLI.cpp new file mode 100644 index 0000000..e1b6a27 --- /dev/null +++ b/src/DebuggerKit/src/NeKernelContractCLI.cpp @@ -0,0 +1,99 @@ +// Copyright 2024-2025, 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 +#include +#include +#include + +#include + +using namespace DebuggerKit::NeKernel; + +static void dbgi_ctrlc_handler(std::int32_t _) { + if (!kPID || kPath.empty()) { + return; + } + + kKernelDebugger.Break(); + + pfd::notify("Debugger Event", "Breakpoint hit!"); + + kKeepRunning = false; +} + +NECTAR_MODULE(DebuggerNeKernel) { + pfd::notify("Debugger Event", + "Nectar Debugger\n(C) 2025 Amlal El Mahrouss and NeKernel.org contributors, all " + "rights reserved."); + + if (argc >= 5 && std::string(argv[1]) == "-k" && argv[2] != nullptr && + std::string(argv[3]) == "-ip" && argv[4] != nullptr) { + kPath = argv[2]; + kPath += ":"; + kPath += argv[4]; + + kStdOut << "[+] KIP (Kernel:IP) set to: " << kPath << "\n"; + + CompilerKit::install_signal(SIGINT, dbgi_ctrlc_handler); + + kKernelDebugger.Attach(kPath, argv[4], kPID); + + while (YES) { + if (kKeepRunning) { + continue; + } + + std::string cmd; + if (!std::getline(std::cin, cmd)) break; + + if (cmd == "c" || cmd == "cont" || cmd == "continue") { + if (kKernelDebugger.Continue()) { + kKeepRunning = true; + + kStdOut << "[+] Continuing...\n"; + + pfd::notify("Debugger Event", "Continuing..."); + } + } + + if (cmd == "d" || cmd == "detach") kKernelDebugger.Detach(); + + if (cmd == "start") { + kStdOut << "[?] Enter a argument to use: "; + std::getline(std::cin, cmd); + + kKernelDebugger.Attach(kPath, cmd, kPID); + } + + if (cmd == "exit") { + if (kPID > 0) kKernelDebugger.Detach(); + + break; + } + + if (cmd == "break" || cmd == "b") { + kStdOut << "[?] Enter a symbol to break on: "; + + std::getline(std::cin, cmd); + + if (kKernelDebugger.BreakAt(cmd)) { + pfd::notify("Debugger Event", "Add BreakAt at: " + cmd); + } + } + } + + return EXIT_SUCCESS; + } + + kStdOut << "usage: " << argv[0] << " -k -ip \n"; + kStdOut << "example: " << argv[0] << " -k /path/to/ne_kernel -ip 127.0.0.1\n"; + + return EXIT_FAILURE; +} + +#endif // DK_NEKERNEL_DEBUGGER diff --git a/src/DebuggerKit/src/POSIXMachContractCLI.cc b/src/DebuggerKit/src/POSIXMachContractCLI.cc deleted file mode 100644 index dd1411c..0000000 --- a/src/DebuggerKit/src/POSIXMachContractCLI.cc +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2024-2025, 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 -#include -#include - -#ifdef DK_MACH_DEBUGGER -#include - -/// @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 \n"; - kStdOut << "example: " << argv[0] << " -p \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/POSIXMachContractCLI.cpp b/src/DebuggerKit/src/POSIXMachContractCLI.cpp new file mode 100644 index 0000000..dd1411c --- /dev/null +++ b/src/DebuggerKit/src/POSIXMachContractCLI.cpp @@ -0,0 +1,96 @@ +// Copyright 2024-2025, 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 +#include +#include + +#ifdef DK_MACH_DEBUGGER +#include + +/// @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 \n"; + kStdOut << "example: " << argv[0] << " -p \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 -- cgit v1.2.3