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.

··Feed·Contatto·Privacy·© 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.1k271 giorno 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 dal chiodo d'oro usato per celebrare il completamento della ferrovia transcontinentale degli Stati Uniti.

Spike supporta le seguenti funzionalità dell'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 in virgola mobile a mezza precisione Zfh e Zfhmin, v1.0
  • Estensione Zfa, v1.0
  • Estensione Zfinx, v1.0
  • Estensione moltiplicazione interi Zmmul, v1.0
  • Estensioni manutenzione blocchi cache Zicbom, Zicbop, Zicboz, v1.0
  • Conformità sia a RVWMO che a RVTSO (Spike è sequenzialmente consistente)
  • Modalità macchina, supervisore e utente, 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.7
  • 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 Zimop, v1.0

Versioni e API

I progetti sono versionati principalmente per indicare quando l'API è stata estesa o resa incompatibile. In quest'ottica, Spike mira a seguire lo schema di versione SemVer, in cui i numeri di versione major vengono incrementati quando vengono apportate modifiche API non retrocompatibili; 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.

La principale API pubblica di Spike è l'ISA RISC-V. L'interfaccia C++ ai meccanismi interni di Spike non è considerata un'API pubblica al momento, e modifiche non retrocompatibili a questa interfaccia verranno apportate senza incrementare il numero di versione major.

Passaggi di compilazione

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

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

Se il sistema utilizza il gestore pacchetti yum, puoi sostituire yum install dtc per il primo passo.

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

Compilazione ed esecuzione di 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. Quindi, compilalo in un binario ELF RISC-V chiamato hello:

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

Ora puoi simulare il programma sul kernel proxy:

$ spike pk hello

Simulazione di una nuova istruzione

Aggiungere un'istruzione al simulatore richiede due passi:

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

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

     $ cd ../riscv-opcodes
     $ vi opcodes       // aggiungi una riga per la nuova istruzione
     $ make install
    
  3. Aggiungi l'istruzione a riscv/riscv.mk.in. Altrimenti, l'istruzione non sarà inclusa nella build e verrà trattata come istruzione illegale.

  4. Ricostruisci il simulatore.

Modalità di debug interattivo

Per avviare la modalità di debug interattivo, lancia spike con -d:

$ spike -d pk hello

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

: reg 0 a0

Per vedere il contenuto di un registro a virgola mobile:

: fregs 0 ft0

oppure:

: fregd 0 ft0

a seconda che si voglia stampare il registro come singola o doppia precisione.

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 core 0):

: mem 0 2020

Puoi avanzare di un'istruzione premendo il tasto invio. Puoi anche eseguire fino al raggiungimento di una uguaglianza desiderata:

: until pc 0 2020                   (fermati quando pc=2020)
: until reg 0 mie a                 (fermati quando registro mie=0xa)
: until mem 2020 50a9907311096993   (fermati quando 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 interattivo 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 interattivo è collegarsi usando gdb. Poiché spike cerca di essere come hardware reale, hai bisogno anche 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

Per eseguire il debug di questo programma, prima avvia spike dicendogli di ascoltare per OpenOCD:

$ spike --rbb-port=9824 -m0x10000:0x20000 rot13
Listening for remote bitbang connection on port 9824.
...
Scarica lo strumento