Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/riscv-software-src/riscv-isa-sim
Segurança de Sistemas EmbarcadosEngenharia ReversaDepuradoresSegurança de HardwareAprendizado e EducaçãoAnálise de Firmware
GitHubriscv-software-src/riscv-isa-sim

riscv-isa-sim

Simulador funcional de ISA RISC-V com suporte a múltiplas extensões (RV32/64, V, criptografia) com modo de depuração interativo, integração com GDB e modelagem em nível de instrução para codesenvolvimento hardware-software e exploração de arquitetura.

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver RepositórioSite
3.2k1.1k15há 8 diasRevisado pelo Kitploit

Simulador Spike de ISA RISC-V

Sobre

Spike, o Simulador de ISA RISC-V, implementa um modelo funcional de um ou mais harts RISC-V. Ele é nomeado em referência ao "golden spike" usado para celebrar a conclusão da ferrovia transcontinental dos EUA.

O Spike suporta os seguintes recursos da ISA RISC-V:

  • ISAs base RV32I e RV64I, v2.1
  • ISAs base RV32E e RV64E, v1.9
  • Extensão Zifencei, v2.0
  • Extensão Zicsr, v2.0
  • Extensão Zicntr, v2.0
  • Extensão M, v2.0
  • Extensão A, v2.1
  • Extensão B, v1.0
  • Extensão F, v2.2
  • Extensão D, v2.2
  • Extensão Q, v2.2
  • Extensão C, v2.0
  • Extensões de criptografia escalar Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh (grupos Zk, Zkn e Zks), v1.0
  • Emulação de fonte de entropia virtual Zkr, v1.0
  • Extensão V, v1.0 (requer um host de 64 bits)
  • Extensão P, v0.9.2
  • Extensão Zba, v1.0
  • Extensão Zbb, v1.0
  • Extensão Zbc, v1.0
  • Extensão Zbs, v1.0
  • Extensões de ponto flutuante de meia precisão Zfh e Zfhmin, v1.0
  • Extensão Zfa, v1.0
  • Extensão Zfinx, v1.0
  • Extensão de multiplicação de inteiros Zmmul, v1.0
  • Extensões de manutenção de blocos de cache Zicbom, Zicbop, Zicboz, v1.0
  • Conformidade com RVWMO e RVTSO (Spike é sequencialmente consistente)
  • Modos Machine, Supervisor e User, v1.11
  • Extensão Hypervisor, v1.0
  • Extensão Svnapot, v1.0
  • Extensão Svpbmt, v1.0
  • Extensão Svinval, v1.0
  • Extensão Svadu, v1.0
  • Extensão Svade, v1.0
  • Extensão Sdext, v1.0-STABLE
  • Extensão Sdtrig, v1.0-STABLE
  • Extensão Smepmp, v1.0
  • Extensão Smstateen, v1.0
  • Extensão Smdbltrp, v1.0
  • Sscofpmf v0.5.2
  • Extensão Ssdbltrp, v1.0
  • Extensão Ssqosid, v1.0
  • Extensão Zaamo, v1.0
  • Extensão Zalrsc, v1.0
  • Extensão Zabha, v1.0
  • Extensão Zacas, v1.0
  • Extensão Zawrs, v1.0
  • Extensão Za64rs, Za128rs, v1.0
  • Extensão Zicfiss, v1.0
  • Extensão Zicfilp, v1.0
  • Extensão Zca, v1.0
  • Extensão Zcb, v1.0
  • Extensão Zcf, v1.0
  • Extensão Zcd, v1.0
  • Extensão Zcmp, v1.0
  • Extensão Zcmt, v1.0
  • Extensão Zfbfmin, v0.6
  • Extensão Zvfbfmin, v0.6
  • Extensão Zvfbfwma, v0.6
  • Extensão Zvabd, v0.7
  • Extensão Zvbb, v1.0
  • Extensão Zvbc, v1.0
  • Extensão Zvkg, v1.0
  • Extensão Zvkned, v1.0
  • Extensão Zvknha, Zvknhb, v1.0
  • Extensão Zvksed, v1.0
  • Extensão Zvksh, v1.0
  • Extensão Zvkt, v1.0
  • Extensão Zvkn, Zvknc, Zvkng, v1.0
  • Extensão Zvks, Zvksc, Zvksg, v1.0
  • Extensão Zvzip, v0.1
  • Extensão Zicond, v1.0
  • Extensão Zilsd, v1.0
  • Extensão Zclsd, v1.0
  • Extensão Zimop, v1.0

Versionamento e APIs

Projetos são versionados principalmente para indicar quando a API foi estendida ou tornada incompatível. Nesse espírito, o Spike visa seguir o esquema de versionamento SemVer, no qual os números de versão principal são incrementados quando alterações incompatíveis com versões anteriores na API são feitas; os números de versão secundária são incrementados quando novas APIs são adicionadas; e os números de versão de patch são incrementados quando bugs são corrigidos de maneira compatível com versões anteriores.

A principal API pública do Spike é a ISA RISC-V. A interface C++ para os internos do Spike não é considerada uma API pública neste momento, e alterações incompatíveis com versões anteriores nesta interface serão feitas sem incrementar o número de versão principal.

Passos de Compilação

Presumimos que a variável de ambiente RISCV está definida para o caminho de instalação das ferramentas RISC-V.

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

Se seu sistema usa o gerenciador de pacotes yum, você pode substituir yum install dtc pelo primeiro passo.

Passos de Compilação no OpenBSD

Instale bash, gmake, dtc e use 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

Compilando e Executando um Programa C Simples

Instale spike (veja Passos de Compilação), riscv-gnu-toolchain e riscv-pk.

Escreva um pequeno programa C e nomeie-o hello.c. Em seguida, compile-o em um binário ELF RISC-V chamado hello:

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

Agora você pode simular o programa sobre o kernel proxy:

root@kitploit:~
$ spike pk hello

Simulando uma Nova Instrução

Adicionar uma instrução ao simulador requer dois passos:

  1. Descreva o comportamento funcional da instrução no arquivo riscv/insns/<new_instruction_name>.h. Examine outras instruções nesse diretório como ponto de partida.

  2. Adicione o opcode e a máscara de opcode a riscv/opcodes.h. Alternativamente, adicione ao pacote riscv-opcodes, e ele fará isso por você:

    root@kitploit:~
     $ cd ../riscv-opcodes
     $ vi opcodes       // add a line for the new instruction
     $ make install
    
  3. Adicione a instrução a riscv/riscv.mk.in. Caso contrário, a instrução não será incluída na compilação e será tratada como uma instrução ilegal.

  4. Recompile o simulador.

Modo de Depuração Interativa

Para invocar o modo de depuração interativa, execute spike com -d:

root@kitploit:~
$ spike -d pk hello

Para ver o conteúdo de um registrador inteiro (0 é para o core 0):

root@kitploit:~
: reg 0 a0

Para ver o conteúdo de um registrador de ponto flutuante:

root@kitploit:~
: fregs 0 ft0

ou:

root@kitploit:~
: fregd 0 ft0

dependendo se deseja imprimir o registrador como precisão simples ou dupla.

Para ver o conteúdo de uma localização de memória (endereço físico em hex):

root@kitploit:~
: mem 2020

Para ver o conteúdo da memória com um endereço virtual (0 para core 0):

root@kitploit:~
: mem 0 2020

Você pode avançar uma instrução pressionando a tecla Enter. Você também pode executar até que uma igualdade desejada seja alcançada:

root@kitploit:~
: until pc 0 2020                   (pare quando pc=2020)
: until reg 0 mie a                 (pare quando o registrador mie=0xa)
: until mem 2020 50a9907311096993   (pare quando mem[2020]=50a9907311096993)

Alternativamente, você pode executar enquanto uma igualdade for verdadeira:

root@kitploit:~
: while mem 2020 50a9907311096993

Você pode continuar a execução indefinidamente com:

root@kitploit:~
: r

Em qualquer ponto durante a execução (mesmo sem -d), você pode entrar no modo de depuração interativa com <control>-<c>.

Para encerrar a simulação do prompt de depuração, pressione <control>-<c> ou:

root@kitploit:~
: q

Depuração com Gdb

Uma alternativa ao modo de depuração interativa é anexar usando gdb. Como o spike tenta se comportar como hardware real, você também precisa do OpenOCD para fazer isso. Usaremos o seguinte programa de teste:

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

Para depurar este programa, primeiro execute spike dizendo a ele para ouvir o OpenOCD:

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

Em um shell separado, execute OpenOCD com o arquivo de configuração apropriado:

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

Em ainda outro shell, inicie sua sessão de depuração gdb:

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) 
...

No terminal do OpenOCD você terá:

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