Sharpprospero

SvenGDK SvenGDK
Dépôt créer le : 17/07/2026
Release du : 24/09/2026 SDK & Toolchain v0.8
Forks: 5 Watcher: 0 48
Choisir une liste...
FR

SharpProspero

Un SDK C# et une chaîne d'outils pour construire les deuxmodules d'applicationetcharges utilesqui courent sur la console. Ecrivez tout en C#; la chaîne d'outils le compile à l'avance, le lie avec son propre linker, et produit soit un paquet installable, soit un ELF indépendant de la position — pas de bibliothèque séparée d'exécution, de linker ou de stub nécessaire. Une construction ne nécessite que le SDK .NET 10.

Comment ça marche

Modules d'application

Un module d'application compile à un autonomeeboot.binemballé dans un installable*.pkg.

flowchart LR
  A[C# source] -->|NativeAOT compile| B[ELF object]
  B -->|SDK linker| C[eboot.bin]
  C -->|container wrap| W[Signed module]
  W -->|packager| D[*.pkg]
  1. Compiler— NativeAOT compile le C# sur un objet autonome x86 64 ELF. Sur Windows la construction exécute cette étape à travers WSL automatiquement.
  2. Lien— le lien SDK fournit son propre objet de départ, un objet de compatibilité et des talons pour chaque importation d'appareil-service.
  3. Enveloppe— le module entre dans le conteneur signé que le chargeur attend.
  4. Paquet— l'emballeur assembleeboot.bin,sce_sysmétadonnées, etsce_modulebibliothèques dans une installation*.pkg(ou un dossier simple avec-Output Folder).

Charges utiles

Une charge utile compile à une position indépendante.elfqu'un chargeur passe en un processus courant sur le réseau. Pas d'étape d'emballage — envoyez-le.

flowchart LR
  A[C# source] -->|NativeAOT compile| B[ELF object]
  B -->|SDK linker| C[payload.elf]
  C -->|payload --send| D[Running on device]
  1. Compiler— la même étape NativeAOT que les modules d'application.
  2. Lien— le linker produit une position indépendante.elfavec l'objet CRT start, qui fournit le log du noyau, la passerelle du syscall brut et l'accès du noyau principal.
  3. Déployer—payload --sendpousse le.elfà un chargeur qui écoute sur l'appareil.

La charge utile SDK fournit la pleine surface d'accès au noyau (processus de marche, escalade des justificatifs, mémoire virtuelle, tableaux de pages), systèmes de fichiers et opérations de montage, E/S POSIX, réseau, crochets de contournement, offsets multi-firmware (FW 1,00 à 12,70) et des démons de service. VoirModules and payloadspour chaque formulaire est le bon choix.

Exigences

  • .NET 10 SDK(Windows ou Linux, x64 seulement).
  • L'étape de compilation s'exécute sur Linux ; sur Windows, la compilation l'exécuteWSLautomatiquement.

Exécuterpwsh doctor.ps1pour vérifier l'environnement. Voirdocs/setup.mdpour l'installation complète.

Début rapide

Vérifiez la configuration et construisez le SDK:

pwsh doctor.ps1
dotnet build SharpProspero.slnx

Module d'application

cp -r samples/prospero-app MyGame
setx SHARPPROSPERO_ROOT "<this folder>"
pwsh $SHARPPROSPERO_ROOT/build/build-app.ps1 -ProjectPath MyGame/SampleApp.csproj

L'application elle-même est de quelques lignes:

using SharpProspero.Application;
using SharpProspero.Graphics;

internal sealed class HelloApp : ProsperoApp
{
    protected override void OnFrame(FrameContext context)
    {
        Surface surface = context.Surface;
        surface.Clear(Color.FromRgb(0x0E, 0x11, 0x16));
        surface.DrawTextCentered("Hello from C#", 500, 5, Color.White);
    }
}

internal static class Program
{
    private static void Main()
    {
        using var app = new HelloApp();
        app.Run();
    }
}

Charge utile

cp -r samples/prospero-payload-echo MyPayload
pwsh $SHARPPROSPERO_ROOT/build/build-app.ps1 -ProjectPath MyPayload/SampleApp.csproj -Payload

Une charge utile minimale:

using System.Runtime.InteropServices;
using SharpProspero.Payload;

namespace SampleApp;

internal static unsafe class Program
{
    [UnmanagedCallersOnly(EntryPoint = "__managed__Main")]
    public static int Main(void* args)
    {
        PayloadCrt.Klog("hello from payload\n\0"u8);
        return 0;
    }
}

Voirdocs/getting-started.mdpour le passage complet.

Outils en ligne de commande

Commandement Ce qu'il fait -- -- -- -- -- -- AutreslinkRelier les objets dans uneboot.bin, une.prxbibliothèque, ou une charge utile.elf.. AutresprxLire un.prxou.sprx, liste ses exportations, et générer un emballage C#. AutreselfRechercher un module ELF ou signé : segments, tailles, symboles, cordes et bandes. AutresselfSignaler le formulaire d'un fichier, signer un ELF dans son contenant, ou extraire à ELF. AutresparamVérifier et appliquer les métadonnées de l'application (sce_sys/param.json). AutresgnfConstruire une texture GNF à partir de PNG, QOI, TGA ou BMP (avec redimensionnement et sRGB). Autres AutresvagConvertir WAV en VAG ou VAG en WAV. AutresshaderSignaler le genre, la version, la taille et l'utilisation du shader compilé. AutrespayloadEnvoyer une charge utile construite.elfà un chargeur sur le réseau. autresnidCalculez l'identificateur d'exportation pour un nom de symbole. AutresstubConstruire une bibliothèque d'importation pour un module à partir d'une liste de noms. Autres AutrescrtÉcrire l'objet de démarrage CRT. AutrescompatÉcrire l'objet de compatibilité. AutresdiffRapporter les exportations a ajouté, supprimé et déplacé entre deux modules. Autres AutresmodulesVérifier que chaque module nécessaire est livré avec l'application. AutressysverRégler la version système contre les modules de l'application. AutresoffsetsDomptez les identifiants et adresses d'exportation d'un module. AutresretargetChanger la version système d'un module enregistre

Exécuter une commande avec--helppour toutes ses options. Voirdocs/commands.mdpour chaque commande groupée par tâche.

Documentation

Commencez ici :

  • Getting started— de rien à un module de fonctionnement.
  • Setup— l'installation complète pour Windows et Linux.
  • Application Modules— la surface API pour les titres homebrew.
  • Payloads— la surface d'accès du noyau, les offsets multi-firmware et l'API pleine charge utile.

Ensuite, par secteur:

Superficie -- -- -- -- -- -- AutresApplication ModulesAutresGraphics,input,audio,media,networking,memory,UI toolkit,data,system services,modules,samples.. AutresPayloadsAutresRuntime,resolver,kernel access,API reference,samples,deploy,troubleshooting.. AutresToolchainAutresArchitecture,build pipeline,modules vs payloads.. AutresReferencesAutresBindings,signed forms,commands.. AutresHelpAutresTroubleshooting.

Licence

GPL-3.0-ou plus tard. Copyright (C) SvenGDK 2026.

Contributeurs GitHub

SvenGDK
SvenGDK
3 contributions