Sharpprospero
Un SDK C# et une chaîne d'outils pour construire à la fois des modules d'application et des charges utiles qui fonctionnent sur la console. Ecrivez tout en C#;...
Choisir une liste...
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]
- Compiler— NativeAOT compile le C# sur un objet autonome x86 64 ELF. Sur Windows la construction exécute cette étape à travers WSL automatiquement.
- Lien— le lien SDK fournit son propre objet de départ, un objet de compatibilité et des talons pour chaque importation d'appareil-service.
- Enveloppe— le module entre dans le conteneur signé que le chargeur attend.
- Paquet— l'emballeur assemble
eboot.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]
- Compiler— la même étape NativeAOT que les modules d'application.
- 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. - 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.