Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/riscv-software-src/riscv-isa-sim
Embedded-System-SicherheitReverse EngineeringDebuggerHardware-SicherheitLernen & BildungFirmware-Analyse
GitHubriscv-software-src/riscv-isa-sim

riscv-isa-sim

Funktionaler RISC-V-ISA-Simulator, der mehrere Erweiterungen (RV32/64, V, Kryptografie) mit interaktivem Debug-Modus, GDB-Integration und instruktionsgenauer Modellierung für die Hardware-Software-Koentwicklung und Architekturforschung unterstützt.

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigenWebseite
3.2k1.1kvor 1 TagVon Kitploit geprüft

Spike RISC-V ISA Simulator

Über

Spike, der RISC-V ISA Simulator, implementiert ein funktionales Modell eines oder mehrerer RISC-V-Kerne. Er ist nach dem goldenen Nagel benannt, der zur Feier der Fertigstellung der transkontinentalen Eisenbahn in den USA verwendet wurde.

Spike unterstützt die folgenden RISC-V-ISA-Funktionen:

  • RV32I and RV64I base ISAs, v2.1
  • RV32E and RV64E base ISAs, v1.9
  • Zifencei extension, v2.0
  • Zicsr extension, v2.0
  • Zicntr extension, v2.0
  • M extension, v2.0
  • A extension, v2.1
  • B extension, v1.0
  • F extension, v2.2
  • D extension, v2.2
  • Q extension, v2.2
  • C extension, v2.0
  • Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh scalar cryptography extensions (Zk, Zkn, and Zks groups), v1.0
  • Zkr virtual entropy source emulation, v1.0
  • V extension, v1.0 (erfordert einen 64-Bit-Host)
  • P extension, v0.9.2
  • Zba extension, v1.0
  • Zbb extension, v1.0
  • Zbc extension, v1.0
  • Zbs extension, v1.0
  • Zfh and Zfhmin half-precision floating-point extensions, v1.0
  • Zfa extension, v1.0
  • Zfinx extension, v1.0
  • Zmmul integer multiplication extension, v1.0
  • Zicbom, Zicbop, Zicboz cache-block maintenance extensions, v1.0
  • Conformance to both RVWMO and RVTSO (Spike is sequentially consistent)
  • Machine, Supervisor, and User modes, v1.11
  • Hypervisor extension, v1.0
  • Svnapot extension, v1.0
  • Svpbmt extension, v1.0
  • Svinval extension, v1.0
  • Svadu extension, v1.0
  • Svade extension, v1.0
  • Sdext extension, v1.0-STABLE
  • Sdtrig extension, v1.0-STABLE
  • Smepmp extension v1.0
  • Smstateen extension, v1.0
  • Smdbltrp extension, v1.0
  • Sscofpmf v0.5.2
  • Ssdbltrp extension, v1.0
  • Ssqosid extension, v1.0
  • Zaamo extension, v1.0
  • Zalrsc extension, v1.0
  • Zabha extension, v1.0
  • Zacas extension, v1.0
  • Zawrs extension, v1.0
  • Za64rs, Za128rs extension, v1.0
  • Zicfiss extension, v1.0
  • Zicfilp extension, v1.0
  • Zca extension, v1.0
  • Zcb extension, v1.0
  • Zcf extension, v1.0
  • Zcd extension, v1.0
  • Zcmp extension, v1.0
  • Zcmt extension, v1.0
  • Zfbfmin extension, v0.6
  • Zvfbfmin extension, v0.6
  • Zvfbfwma extension, v0.6
  • Zvabd extension, v0.7
  • Zvbb extension, v1.0
  • Zvbc extension, v1.0
  • Zvkg extension, v1.0
  • Zvkned extension, v1.0
  • Zvknha, Zvknhb extension, v1.0
  • Zvksed extension, v1.0
  • Zvksh extension, v1.0
  • Zvkt extension, v1.0
  • Zvkn, Zvknc, Zvkng extension, v1.0
  • Zvks, Zvksc, Zvksg extension, v1.0
  • Zvzip extension, v0.1
  • Zicond extension, v1.0
  • Zilsd extension, v1.0
  • Zclsd extension, v1.0
  • Zimop extension, v1.0

Versionierung und APIs

Projekte werden in erster Linie versioniert, um anzuzeigen, wann die API erweitert oder inkompatibel gemacht wurde. In diesem Sinne zielt Spike darauf ab, dem SemVer-Versionierungsschema zu folgen, bei dem Hauptversionsnummern erhöht werden, wenn rückwärtsinkompatible API-Änderungen vorgenommen werden; Nebenversionsnummern werden erhöht, wenn neue APIs hinzugefügt werden; und Patchversionsnummern werden erhöht, wenn Fehler in einer rückwärtskompatiblen Weise behoben werden.

Die wichtigste öffentliche API von Spike ist die RISC-V-ISA. Die C++-Schnittstelle zu Spikes Interna gilt derzeit nicht als öffentliche API, und rückwärtsinkompatible Änderungen an dieser Schnittstelle werden vorgenommen, ohne die Hauptversionsnummer zu erhöhen.

Build-Schritte

Wir gehen davon aus, dass die Umgebungsvariable RISCV auf den Installationspfad der RISC-V-Tools gesetzt ist.

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

Falls Ihr System den yum-Paketmanager verwendet, können Sie den ersten Schritt durch yum install dtc ersetzen.

Build-Schritte auf OpenBSD

Installieren Sie bash, gmake, dtc und verwenden Sie clang.

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

Kompilieren und Ausführen eines einfachen C-Programms

Installieren Sie spike (siehe Build-Schritte), riscv-gnu-toolchain und riscv-pk.

Schreiben Sie ein kurzes C-Programm und nennen Sie es hello.c. Kompilieren Sie es dann in ein RISC-V- ELF-Binary namens hello:

root@kitploit:~
$ riscv64-unknown-elf-gcc -o hello hello.c

Jetzt können Sie das Programm über den Proxy-Kernel simulieren:

root@kitploit:~
$ spike pk hello

Simulieren einer neuen Instruktion

Das Hinzufügen einer Instruktion zum Simulator erfordert zwei Schritte:

  1. Beschreiben Sie das funktionale Verhalten der Instruktion in der Datei riscv/insns/<new_instruction_name>.h. Untersuchen Sie andere Instruktionen in diesem Verzeichnis als Ausgangspunkt.

  2. Fügen Sie den Opcode und die Opcode-Maske zu riscv/opcodes.h hinzu. Alternativ fügen Sie es zum riscv-opcodes-Paket hinzu, und es wird dies für Sie erledigen:

    root@kitploit:~
     $ cd ../riscv-opcodes
     $ vi opcodes       // fügen Sie eine Zeile für die neue Instruktion hinzu
     $ make install
    
  3. Fügen Sie die Instruktion zu riscv/riscv.mk.in hinzu. Andernfalls wird die Instruktion nicht in den Build einbezogen und als illegale Instruktion behandelt.

  4. Bauen Sie den Simulator neu.

Interaktiver Debug-Modus

Um den interaktiven Debug-Modus aufzurufen, starten Sie spike mit -d:

root@kitploit:~
$ spike -d pk hello

Um den Inhalt eines Integer-Registers anzuzeigen (0 steht für Kern 0):

root@kitploit:~
: reg 0 a0

Um den Inhalt eines Gleitkommaregisters anzuzeigen:

root@kitploit:~
: fregs 0 ft0

oder:

root@kitploit:~
: fregd 0 ft0

je nachdem, ob Sie das Register als einfache oder doppelte Genauigkeit ausgeben möchten.

Um den Inhalt einer Speicherstelle anzuzeigen (physische Adresse in hex):

root@kitploit:~
: mem 2020

Um den Inhalt des Speichers mit einer virtuellen Adresse anzuzeigen (0 für Kern 0):

root@kitploit:~
: mem 0 2020

Sie können mit der Eingabetaste einen Schritt vorrücken. Sie können auch ausführen, bis eine gewünschte Gleichheit erreicht ist:

root@kitploit:~
: until pc 0 2020                   (stoppen, wenn pc=2020)
: until reg 0 mie a                 (stoppen, wenn Register mie=0xa)
: until mem 2020 50a9907311096993   (stoppen, wenn mem[2020]=50a9907311096993)

Alternativ können Sie so lange ausführen, wie eine Gleichheit wahr ist:

root@kitploit:~
: while mem 2020 50a9907311096993

Sie können die Ausführung unbegrenzt fortsetzen mit:

root@kitploit:~
: r

Während der Ausführung (auch ohne -d) können Sie jederzeit in den interaktiven Debug-Modus mit <Strg>-<c> wechseln.

Um die Simulation von der Debug-Eingabeaufforderung zu beenden, drücken Sie <Strg>-<c> oder:

root@kitploit:~
: q

Debuggen mit Gdb

Eine Alternative zum interaktiven Debug-Modus ist das Anhängen mit gdb. Da spike versucht, wie echte Hardware zu sein, benötigen Sie dazu auch OpenOCD. Wir verwenden das folgende Testprogramm:

root@kitploit:~
$ 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

Um dieses Programm zu debuggen, starten Sie zuerst spike und weisen es an, auf OpenOCD zu hören:

root@kitploit:~
$ spike --rbb-port=9824 -m0x10000:0x20000 rot13
Listening for remote bitbang connection on port 9824.
...

Führen Sie in einer separaten Shell OpenOCD mit der entsprechenden Konfigurationsdatei aus:

root@kitploit:~
$ cat spike.cfg 
adapter driver remote_bitbang
remote_bitbang host localhost
remote_bitbang port 9824

set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0xdeadbeef

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME

gdb report_data_abort enable

init
arm semihosting enable
halt
$ openocd -f spike.cfg
Open On-Chip Debugger 0.12.0
...
Info : starting gdb server for riscv.cpu on 3333
Info : Listening on port 3333 for gdb connections
riscv.cpu halted due to debug-request. Semihosting is active.
...
riscv.cpu: target state: halted

Starten Sie in einer weiteren Shell Ihre gdb-Debug-Sitzung:

root@kitploit:~
$ riscv64-unknown-elf-gdb rot13
...
Reading symbols from rot13...
(gdb) target extended-remote localhost:3333
...
(gdb) load
...
(gdb) set $sp=0x2fff0
(gdb) b main
Breakpoint 1 at 0x10202: file rot13.c, line 5.
(gdb) c
Continuing.
Disabling abstract command writes to CSRs.

Breakpoint 1, main () at rot13.c:5
5       {
(gdb) print text
$1 = "Vafgehpgvba frgf jnag gb or serr!"
(gdb) until done
[riscv.cpu] Found 4 triggers
main () at rot13.c:16
16          printf("decoded text: %s\n", text);
(gdb) c
Continuing.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00019ff8 in _exit ()
(gdb) 
...

Auf dem OpenOCD-Terminal sehen Sie:

root@kitploit:~
...
decoded text: Instruction sets want to be free!
semihosting: *** application exited with 0 ***
riscv.cpu halted due to breakpoint. Semihosting is active.
Tool herunterladen