Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
riscv-isa-sim — Simulador funcional del ISA RISC-V que admite múltiples extensiones (RV32/64, V, criptografía) con modo de depuración interactiva, integración con GDB y modelado a nivel de instrucción para el codesarrollo de hardware-software y la exploración de arquitecturas. | Kitploit
Herramientas/GitHubGitHub/riscv-software-src/riscv-isa-sim
Seguridad de Sistemas EmbebidosIngeniería InversaDepuradoresSeguridad de HardwareAprendizaje y EducaciónAnálisis de Firmware
GitHubriscv-software-src/riscv-isa-sim

riscv-isa-sim

Simulador funcional del ISA RISC-V que admite múltiples extensiones (RV32/64, V, criptografía) con modo de depuración interactiva, integración con GDB y modelado a nivel de instrucción para el codesarrollo de hardware-software y la exploración de arquitecturas.

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver RepositorioSitio web
3.2k1.1k42hace 3 díasRevisado por Kitploit

Simulador de ISA RISC-V Spike

Acerca de

Spike, el Simulador de ISA RISC-V, implementa un modelo funcional de uno o más harts RISC-V. Recibe su nombre del clavo dorado utilizado para celebrar la finalización del ferrocarril transcontinental de EE. UU.

Spike admite las siguientes características de la ISA RISC-V:

  • ISAs base RV32I y RV64I, v2.1
  • ISAs base RV32E y RV64E, v1.9
  • Extensión Zifencei, v2.0
  • Extensión Zicsr, v2.0
  • Extensión Zicntr, v2.0
  • Extensión M, v2.0
  • Extensión A, v2.1
  • Extensión B, v1.0
  • Extensión F, v2.2
  • Extensión D, v2.2
  • Extensión Q, v2.2
  • Extensión C, v2.0
  • Extensiones de criptografía escalar Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh (grupos Zk, Zkn y Zks), v1.0
  • Emulación de fuente de entropía virtual Zkr, v1.0
  • Extensión V, v1.0 (requiere un host de 64 bits)
  • Extensión P, v0.9.2
  • Extensión Zba, v1.0
  • Extensión Zbb, v1.0
  • Extensión Zbc, v1.0
  • Extensión Zbs, v1.0
  • Extensiones de coma flotante de media precisión Zfh y Zfhmin, v1.0
  • Extensión Zfa, v1.0
  • Extensión Zfinx, v1.0
  • Extensión de multiplicación entera Zmmul, v1.0
  • Extensiones de mantenimiento de bloques de caché Zicbom, Zicbop, Zicboz, v1.0
  • Conformidad tanto con RVWMO como con RVTSO (Spike es secuencialmente consistente)
  • Modos Machine, Supervisor y User, v1.11
  • Extensión Hypervisor, v1.0
  • Extensión Svnapot, v1.0
  • Extensión Svpbmt, v1.0
  • Extensión Svinval, v1.0
  • Extensión Svadu, v1.0
  • Extensión Svade, v1.0
  • Extensión Sdext, v1.0-STABLE
  • Extensión Sdtrig, v1.0-STABLE
  • Extensión Smepmp v1.0
  • Extensión Smstateen, v1.0
  • Extensión Smdbltrp, v1.0
  • Sscofpmf v0.5.2
  • Extensión Ssdbltrp, v1.0
  • Extensión Ssqosid, v1.0
  • Extensión Zaamo, v1.0
  • Extensión Zalrsc, v1.0
  • Extensión Zabha, v1.0
  • Extensión Zacas, v1.0
  • Extensión Zawrs, v1.0
  • Extensión Za64rs, Za128rs, v1.0
  • Extensión Zicfiss, v1.0
  • Extensión Zicfilp, v1.0
  • Extensión Zca, v1.0
  • Extensión Zcb, v1.0
  • Extensión Zcf, v1.0
  • Extensión Zcd, v1.0
  • Extensión Zcmp, v1.0
  • Extensión Zcmt, v1.0
  • Extensión Zfbfmin, v0.6
  • Extensión Zvfbfmin, v0.6
  • Extensión Zvfbfwma, v0.6
  • Extensión Zvabd, v0.9
  • Extensión Zvbb, v1.0
  • Extensión Zvbc, v1.0
  • Extensión Zvkg, v1.0
  • Extensión Zvkned, v1.0
  • Extensión Zvknha, Zvknhb, v1.0
  • Extensión Zvksed, v1.0
  • Extensión Zvksh, v1.0
  • Extensión Zvkt, v1.0
  • Extensión Zvkn, Zvknc, Zvkng, v1.0
  • Extensión Zvks, Zvksc, Zvksg, v1.0
  • Extensión Zvzip, v0.1
  • Extensión Zicond, v1.0
  • Extensión Zilsd, v1.0
  • Extensión Zclsd, v1.0
  • Extensión Zilx, v0.1
  • Extensión Zimop, v1.0

Versionado y APIs

Los proyectos se versionan principalmente para indicar cuándo la API se ha ampliado o se ha vuelto incompatible. Con ese espíritu, Spike pretende seguir el esquema de versionado SemVer, en el que los números de versión mayor se incrementan cuando se realizan cambios de API incompatibles hacia atrás; los números de versión menor se incrementan cuando se añaden nuevas APIs; y los números de versión de parche se incrementan cuando se corrigen errores de forma compatible hacia atrás.

La principal API pública de Spike es la ISA RISC-V. La interfaz C++ con los componentes internos de Spike no se considera una API pública en este momento, y se realizarán cambios incompatibles hacia atrás en esta interfaz sin incrementar el número de versión mayor.

Pasos de compilación

Asumimos que la variable de entorno RISCV está configurada con la ruta de instalación de las herramientas RISC-V.

$ git submodule update --init --recursive
$ 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

Si tu sistema utiliza el gestor de paquetes yum, puedes sustituir yum install dtc por el primer paso.

Puedes omitir el segundo paso si no necesitas usar la E/S de comandos mediante socket para el modo de depuración interactivo.

Pasos de compilación en OpenBSD

Instala bash, gmake, dtc y usa clang.

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

Compilar y ejecutar un programa sencillo en C

Instala spike (consulta los pasos de compilación), riscv-gnu-toolchain y riscv-pk.

Escribe un programa corto en C y llámalo hello.c. Luego, compílalo en un binario ELF de RISC-V llamado hello:

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

Ahora puedes simular el programa sobre el proxy kernel:

$ spike pk hello

Simular una nueva instrucción

Añadir una instrucción al simulador requiere dos pasos:

  1. Describe el comportamiento funcional de la instrucción en el archivo riscv/insns/<new_instruction_name>.h. Examina otras instrucciones en ese directorio como punto de partida.

  2. Añade el opcode y la máscara de opcode a riscv/opcodes.h. Alternativamente, añádelo al paquete riscv-opcodes, y lo hará por ti:

     $ cd ../riscv-opcodes
     $ vi opcodes       // añade una línea para la nueva instrucción
     $ make install
    
  3. Añade la instrucción a riscv/riscv.mk.in. De lo contrario, la instrucción no se incluirá en la compilación y se tratará como una instrucción ilegal.

  4. Recompila el simulador.

Modo de depuración interactivo

Para invocar el modo de depuración interactivo, lanza spike con -d:

$ spike -d pk hello

Para ver el contenido de un registro entero (0 es para el núcleo 0):

: reg 0 a0

Para ver el contenido de un registro de punto flotante:

: fregs 0 ft0

o:

: fregd 0 ft0

dependiendo de si deseas imprimir el registro en precisión simple o doble.

Para ver el contenido de una ubicación de memoria (dirección física en hexadecimal):

: mem 2020

Para ver el contenido de la memoria con una dirección virtual (0 para el núcleo 0):

: mem 0 2020

Puedes avanzar una instrucción pulsando la tecla enter. También puedes ejecutar hasta alcanzar una igualdad deseada:

: until pc 0 2020                   (detener cuando pc=2020)
: until reg 0 mie a                 (detener cuando el registro mie=0xa)
: until mem 2020 50a9907311096993   (detener cuando mem[2020]=50a9907311096993)

Alternativamente, puedes ejecutar mientras una igualdad sea verdadera:

: while mem 2020 50a9907311096993

Puedes continuar la ejecución indefinidamente con:

: r

En cualquier momento durante la ejecución (incluso sin -d), puedes entrar en el modo de depuración interactivo con <control>-<c>.

Para finalizar la simulación desde el prompt de depuración, pulsa <control>-<c> o:

: q

Depuración con Gdb

Una alternativa al modo de depuración interactivo es adjuntarse usando gdb. Como spike intenta comportarse como hardware real, también necesitas OpenOCD para hacerlo. Usaremos el siguiente programa de prueba:

$ 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
Descargar herramienta