mirror of
https://github.com/fstat13/PSCapture.git
synced 2026-10-17 15:00:37 +02:00
- docs/GUIDE.it.md and docs/BUILD.it.md: full italian translations - docs/index.it.html: italian HTML guide with language switcher - README: guide/build links right under the badges (EN + IT) - GUIDE.md / BUILD.md: link to their italian editions
163 lines
5.3 KiB
Markdown
163 lines
5.3 KiB
Markdown
# PSCapture — build dai sorgenti, passo per passo
|
|
|
|
Tutto il necessario per passare da questi sorgenti a un `PSCapture.exe`
|
|
funzionante e a un `pscapture.elf` per la console. Ogni comando è scritto
|
|
esattamente come va eseguito, in ordine. Qui dentro non c'è magia: l'ordine
|
|
conta e ogni passo è spiegato.
|
|
|
|
Ci sono due metà, che si compilano in posti diversi:
|
|
|
|
| Metà | Output | Dove si compila | Toolchain |
|
|
|---|---|---|---|
|
|
| Payload console | `payload/pscapture.elf` | Docker (container Linux) | PS5 payload SDK (prospero-clang) |
|
|
| Lato PC | `pc/pscapture.exe` + `pc/pscapture.dll` | Windows | MinGW-w64 (`gcc` + `windres`) |
|
|
|
|
🇬🇧 English version: [BUILD.md](BUILD.md)
|
|
|
|
---
|
|
|
|
## Parte 1 — Il payload per la console
|
|
|
|
### 1.1 Cosa serve
|
|
|
|
- **Docker** (Docker Desktop su Windows, o Docker normale su Linux/macOS).
|
|
- **L'immagine del PS5 payload SDK.** È il payload SDK della community per
|
|
PS5 (`prospero-clang`, `make`, `PS5_PAYLOAD_SDK` nell'ambiente) impacchettato
|
|
in una immagine. Sulla macchina di sviluppo l'immagine si chiama `ps5sdk:18`
|
|
— qualsiasi nome va bene, basta adattare i comandi.
|
|
|
|
Controlla che l'immagine ci sia:
|
|
|
|
```bash
|
|
docker images | grep ps5sdk
|
|
```
|
|
|
|
### 1.2 Build
|
|
|
|
Dalla radice della repo:
|
|
|
|
```bash
|
|
docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 make
|
|
```
|
|
|
|
Su Windows (PowerShell/cmd) metti il percorso completo al posto di
|
|
`"$PWD/payload"`, es.: `-v "C:\Users\tuonome\PSCapture\payload:/payload"`.
|
|
|
|
Risultato: **`payload/pscapture.elf`** (~175 KB).
|
|
|
|
Il `Makefile` fa l'unica cosa che conta: compila `main.c` con il clang
|
|
Prospero dell'SDK e linka l'ELF finale. Nessun altro input.
|
|
|
|
### 1.3 Opzionale — mandarlo alla console
|
|
|
|
Con la console jailbroken (payload loader sulla porta 9021):
|
|
|
|
```bash
|
|
docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 \
|
|
make deploy PS5_HOST=192.168.0.36
|
|
```
|
|
|
|
(oppure carica `pscapture.elf` con il loader che usi di solito).
|
|
|
|
Come si presenta un avvio sano sulla console:
|
|
|
|
- appare `/data/pscapture.log` con il log di partenza,
|
|
- appare `/data/pscapture.port` con la porta TCP dello stream,
|
|
- la console mostra la notifica *PSCapture is streaming on:PORT*.
|
|
|
|
---
|
|
|
|
## Parte 2 — Il lato PC
|
|
|
|
### 2.1 Cosa serve (Windows)
|
|
|
|
**MinGW-w64 64-bit** con `gcc` e `windres`. Sulla macchina di sviluppo:
|
|
|
|
```powershell
|
|
winget install BrechtSanders.WinLibs.POSIX.UCRT
|
|
```
|
|
|
|
(oppure qualsiasi MSYS2 con `mingw-w64-x86_64-gcc` — `pacman -S mingw-w64-x86_64-gcc`).
|
|
|
|
Controlla che entrambi siano nel PATH:
|
|
|
|
```bash
|
|
gcc --version
|
|
windres --version
|
|
```
|
|
|
|
### 2.2 Build — l'ordine è obbligatorio
|
|
|
|
`pscapture.res` è un bundle che **incastra i file così come sono su disco**:
|
|
l'icona, il payload della console e il driver della capture card. Quindi la
|
|
DLL va compilata *prima* del passo risorse, e il payload deve già trovarsi in
|
|
`pc/` quando gira `windres`. L'EXE si compila per ultimo.
|
|
|
|
```bash
|
|
cd pc
|
|
|
|
# 0) porta il payload appena compilato accanto al .rc (viene incastrato così com'è)
|
|
cp ../payload/pscapture.elf .
|
|
|
|
# 1) il driver della capture card (filtro sorgente DirectShow)
|
|
gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \
|
|
-lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32
|
|
|
|
# 2) bundle: icona + payload + driver in un unico oggetto risorse
|
|
# (pscapture.rc => 1 ICON pscapture.ico / 2 RCDATA pscapture.elf
|
|
# / 3 RCDATA pscapture.dll)
|
|
windres pscapture.rc -O coff -o pscapture.res
|
|
|
|
# 3) l'app — un unico eseguibile autocontenuto
|
|
gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \
|
|
-lws2_32 -lshell32 -ladvapi32 -luxtheme
|
|
```
|
|
|
|
### 2.3 Verifica della build
|
|
|
|
```bash
|
|
# il driver deve dipendere SOLO da DLL di sistema (niente libgcc/libwinpthread):
|
|
objdump -p pscapture.dll | grep "DLL Name"
|
|
|
|
# le dimensioni giuste: exe ~500 KB, dll ~220 KB
|
|
ls -la pscapture.exe pscapture.dll
|
|
|
|
# payload e driver sono davvero dentro l'eseguibile:
|
|
strings pscapture.exe | grep -c PSCapture
|
|
```
|
|
|
|
Avvia `pscapture.exe`: si apre la finestra (prompt UAC → Sì) e il pannello log
|
|
mostra la sequenza controllo driver → estrazione payload → tentativo di
|
|
deploy. È la stessa sequenza descritta in `docs/INSTALLER.md`.
|
|
|
|
### 2.4 Trappole (imparate sul campo)
|
|
|
|
- **`-static -static-libgcc` sulla DLL non è cosmetico.** Senza, il driver
|
|
può ritrovarsi a dipendere dalle DLL runtime di mingw che *non* sono nel
|
|
PATH di sistema quando Windows (o un'altra app) lo carica — il classico
|
|
*"impossibile trovare il modulo specificato"*.
|
|
- **Ordine di build.** `windres` legge `pscapture.dll` e `pscapture.elf` da
|
|
`pc/` al momento della compilazione. Ricompili la DLL → rifai `windres` →
|
|
ricompili l'EXE, ogni volta. Dimenticare il passo centrale spedisce il
|
|
driver vecchio dentro l'exe nuovo.
|
|
- **Solo ASCII** nelle stringhe passate alle API Win32 `*A` (titoli, bottoni,
|
|
log). Byte UTF-8 in una stringa ANSI si vedono come caratteri rotti.
|
|
- Il **manifest** (`pc/pscapture.manifest`) è tenuto solo per riferimento;
|
|
la build attuale **non** lo incastra — l'auto-elevazione è fatta nel codice
|
|
(`ShellExecuteEx … "runas"`), cosa che evita il `.rsrc merge failure` di
|
|
mingw con più manifest.
|
|
|
|
### 2.5 Preparare una release
|
|
|
|
```bash
|
|
mkdir -p dist
|
|
cp pc/pscapture.exe pc/pscapture.dll dist/
|
|
```
|
|
|
|
Per gli utenti basta `pscapture.exe` da solo (la DLL e il payload viaggiano
|
|
dentro). La `pscapture.dll` sciolta si allega per le installazioni manuali:
|
|
|
|
```bash
|
|
rundll32 "pscapture.dll",DllRegisterServer
|
|
```
|