Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
riscv-isa-sim — Simulatore funzionale dell'ISA RISC-V che supporta molteplici estensioni (RV32/64, V, crittografia) con modalità di debug interattivo, integrazione GDB e modellazione a livello di istruzione per lo sviluppo congiunto hardware-software e l'esplorazione dell'architettura. | Kitploit
Strumenti/GitHubGitHub/riscv-software-src/riscv-isa-sim
Sicurezza Sistemi EmbeddedReverse EngineeringDebuggerSicurezza HardwareApprendimento e FormazioneAnalisi del Firmware
GitHubriscv-software-src/riscv-isa-sim

riscv-isa-sim

Simulatore funzionale dell'ISA RISC-V che supporta molteplici estensioni (RV32/64, V, crittografia) con modalità di debug interattivo, integrazione GDB e modellazione a livello di istruzione per lo sviluppo congiunto hardware-software e l'esplorazione dell'architettura.

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi RepositorySito web
3.2k1.1k384h 58m faRevisionato da Kitploit

Simulatore ISA RISC-V Spike

Informazioni

Spike, il simulatore ISA RISC-V, implementa un modello funzionale di uno o più hart RISC-V. Prende il nome dallo spike d'oro usato per celebrare il completamento della ferrovia transcontinentale statunitense.

Spike supporta le seguenti funzionalità ISA RISC-V:

  • ISA base RV32I e RV64I, v2.1
  • ISA base RV32E e RV64E, v1.9
  • Estensione Zifencei, v2.0
  • Estensione Zicsr, v2.0
  • Estensione Zicntr, v2.0
  • Estensione M, v2.0
  • Estensione A, v2.1
  • Estensione B, v1.0
  • Estensione F, v2.2
  • Estensione D, v2.2
  • Estensione Q, v2.2
  • Estensione C, v2.0
  • Estensioni di crittografia scalare Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh (gruppi Zk, Zkn e Zks), v1.0
  • Emulazione della sorgente di entropia virtuale Zkr, v1.0
  • Estensione V, v1.0 (richiede un host a 64 bit)
  • Estensione P, v0.9.2
  • Estensione Zba, v1.0
  • Estensione Zbb, v1.0
  • Estensione Zbc, v1.0
  • Estensione Zbs, v1.0
  • Estensioni a virgola mobile a mezza precisione Zfh e Zfhmin, v1.0
  • Estensione Zfa, v1.0
  • Estensione Zfinx, v1.0
  • Estensione di moltiplicazione intera Zmmul, v1.0
  • Estensioni di manutenzione dei blocchi di cache Zicbom, Zicbop, Zicboz, v1.0
  • Conformità sia a RVWMO che a RVTSO (Spike è sequenzialmente consistente)
  • Modalità Machine, Supervisor e User, v1.11
  • Estensione Hypervisor, v1.0
  • Estensione Svnapot, v1.0
  • Estensione Svpbmt, v1.0
  • Estensione Svinval, v1.0
  • Estensione Svadu, v1.0
  • Estensione Svade, v1.0
  • Estensione Sdext, v1.0-STABLE
  • Estensione Sdtrig, v1.0-STABLE
  • Estensione Smepmp v1.0
  • Estensione Smstateen, v1.0
  • Estensione Smdbltrp, v1.0
  • Sscofpmf v0.5.2
  • Estensione Ssdbltrp, v1.0
  • Estensione Ssqosid, v1.0
  • Estensione Zaamo, v1.0
  • Estensione Zalrsc, v1.0
  • Estensione Zabha, v1.0
  • Estensione Zacas, v1.0
  • Estensione Zawrs, v1.0
  • Estensione Za64rs, Za128rs, v1.0
  • Estensione Zicfiss, v1.0
  • Estensione Zicfilp, v1.0
  • Estensione Zca, v1.0
  • Estensione Zcb, v1.0
  • Estensione Zcf, v1.0
  • Estensione Zcd, v1.0
  • Estensione Zcmp, v1.0
  • Estensione Zcmt, v1.0
  • Estensione Zfbfmin, v0.6
  • Estensione Zvfbfmin, v0.6
  • Estensione Zvfbfwma, v0.6
  • Estensione Zvabd, v0.9
  • Estensione Zvbb, v1.0
  • Estensione Zvbc, v1.0
  • Estensione Zvkg, v1.0
  • Estensione Zvkned, v1.0
  • Estensione Zvknha, Zvknhb, v1.0
  • Estensione Zvksed, v1.0
  • Estensione Zvksh, v1.0
  • Estensione Zvkt, v1.0
  • Estensione Zvkn, Zvknc, Zvkng, v1.0
  • Estensione Zvks, Zvksc, Zvksg, v1.0
  • Estensione Zvzip, v0.1
  • Estensione Zicond, v1.0
  • Estensione Zilsd, v1.0
  • Estensione Zclsd, v1.0
  • Estensione Zilx, v0.1
  • Estensione Zimop, v1.0

Versionamento e API

I progetti vengono versionati principalmente per indicare quando l'API è stata estesa o resa incompatibile. In questo spirito, Spike mira a seguire lo schema di versionamento SemVer, in cui i numeri di versione major vengono incrementati quando vengono apportate modifiche incompatibili con le versioni precedenti all'API; i numeri di versione minor vengono incrementati quando vengono aggiunte nuove API; e i numeri di versione patch vengono incrementati quando vengono corretti bug in modo retrocompatibile.

L'API pubblica principale di Spike è l'ISA RISC-V. L'interfaccia C++ verso le parti interne di Spike non è considerata un'API pubblica in questo momento, e modifiche incompatibili con le versioni precedenti a questa interfaccia verranno apportate senza incrementare il numero di versione major.

Passaggi di compilazione

Presumiamo che la variabile d'ambiente RISCV sia impostata al percorso di installazione degli strumenti RISC-V.

$ apt-get install device-tree-compiler
$ apt-get install libboost-regex-dev libboost-system-dev
$ mkdir build
$ cd build
$ ../configure --prefix=$RISCV
$ make
$ [sudo] make install

Se il tuo sistema utilizza il gestore di pacchetti yum, puoi sostituire yum install dtc al primo passaggio.

Puoi saltare il secondo passaggio se non hai bisogno di usare l'I/O dei comandi via socket per la modalità di debug interattiva.

Passaggi di compilazione su OpenBSD

Installa bash, gmake, dtc e usa clang.

$ pkg_add bash gmake dtc
$ exec bash
$ export CC=cc; export CXX=c++
$ mkdir build
$ cd build
$ ../configure --prefix=$RISCV
$ gmake
$ [doas] make install

Compilare ed eseguire un semplice programma C

Installa spike (vedi Passaggi di compilazione), riscv-gnu-toolchain e riscv-pk.

Scrivi un breve programma C e chiamalo hello.c. Poi, compilalo in un binario ELF RISC-V chiamato hello:

$ riscv64-unknown-elf-gcc -o hello hello.c

Ora puoi simulare il programma sopra il proxy kernel:

$ spike pk hello

Simulare una nuova istruzione

Aggiungere un'istruzione al simulatore richiede due passaggi:

  1. Descrivi il comportamento funzionale dell'istruzione nel file riscv/insns/<new_instruction_name>.h. Esamina altre istruzioni in quella directory come punto di partenza.

  2. Aggiungi l'opcode e la maschera dell'opcode a riscv/opcodes.h. In alternativa, aggiungilo al pacchetto riscv-opcodes, e lo farà per te:

     $ cd ../riscv-opcodes
     $ vi opcodes       // add a line for the new instruction
     $ make install
    
  3. Aggiungi l'istruzione a riscv/riscv.mk.in. Altrimenti, l'istruzione non sarà inclusa nella build e sarà trattata come un'istruzione illegale.

  4. Ricompila il simulatore.

Modalità di debug interattiva

Per invocare la modalità di debug interattiva, avvia spike con -d:

$ spike -d pk hello

Per vedere il contenuto di un registro intero (0 è per il core 0):

: reg 0 a0

Per vedere il contenuto di un registro in virgola mobile:

: fregs 0 ft0

oppure:

: fregd 0 ft0

a seconda che tu voglia stampare il registro in precisione singola o doppia.

Per vedere il contenuto di una locazione di memoria (indirizzo fisico in esadecimale):

: mem 2020

Per vedere il contenuto della memoria con un indirizzo virtuale (0 per il core 0):

: mem 0 2020

Puoi avanzare di un'istruzione premendo il tasto invio. Puoi anche eseguire fino a raggiungere un'uguaglianza desiderata:

: until pc 0 2020                   (stop when pc=2020)
: until reg 0 mie a                 (stop when register mie=0xa)
: until mem 2020 50a9907311096993   (stop when mem[2020]=50a9907311096993)

In alternativa, puoi eseguire finché un'uguaglianza è vera:

: while mem 2020 50a9907311096993

Puoi continuare l'esecuzione indefinitamente con:

: r

In qualsiasi momento durante l'esecuzione (anche senza -d), puoi entrare nella modalità di debug interattiva con <control>-<c>.

Per terminare la simulazione dal prompt di debug, premi <control>-<c> oppure:

: q

Debug con Gdb

Un'alternativa alla modalità di debug interattiva è collegarsi usando gdb. Poiché spike cerca di essere come l'hardware reale, hai anche bisogno di OpenOCD per farlo. Useremo il seguente programma di test:

$ cat rot13.c
#include <stdio.h>
char text[] = "Vafgehpgvba frgf jnag gb or serr!";

// Don't use the stack, because sp isn't set up.
volatile int wait = 1;

int main()
{
    int i = 0;
    while (text[i]) {
        char lower = text[i] | 32;
        if (lower >= 'a' && lower <= 'm')
            text[i] += 13;
        else if (lower > 'm' && lower <= 'z')
            text[i] -= 13;
        i++;
    }
done:
    printf("decoded text: %s\n", text);
}
$ riscv64-unknown-elf-gcc -g -Og --specs=semihost.specs -o rot13 rot13.c
Scarica lo strumento