Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
riscv-isa-sim — Функциональный симулятор ISA RISC-V, поддерживающий множество расширений (RV32/64, V, криптография) с интерактивным режимом отладки, интеграцией GDB и моделированием на уровне инструкций для совместной разработки аппаратного и программного обеспечения и исследования архитектуры. | Kitploit
Инструменты/GitHubGitHub/riscv-software-src/riscv-isa-sim
Безопасность встроенных системОбратная инженерияОтладчикиАппаратная БезопасностьОбучение и ОбразованиеАнализ Прошивок
GitHubriscv-software-src/riscv-isa-sim

riscv-isa-sim

Функциональный симулятор ISA RISC-V, поддерживающий множество расширений (RV32/64, V, криптография) с интерактивным режимом отладки, интеграцией GDB и моделированием на уровне инструкций для совместной разработки аппаратного и программного обеспечения и исследования архитектуры.

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
РепозиторийСайт
3.2k1.1k157 дней назадПроверено Kitploit

Spike RISC-V ISA Simulator

О программе

Spike, симулятор архитектуры RISC-V ISA, реализует функциональную модель одного или нескольких ядер RISC-V. Он назван в честь золотого костыля, ознаменовавшего завершение строительства трансконтинентальной железной дороги США.

Spike поддерживает следующие возможности архитектуры RISC-V:

  • Базовые ISA RV32I и RV64I, v2.1
  • Базовые ISA RV32E и RV64E, v1.9
  • Расширение Zifencei, v2.0
  • Расширение Zicsr, v2.0
  • Расширение Zicntr, v2.0
  • Расширение M, v2.0
  • Расширение A, v2.1
  • Расширение B, v1.0
  • Расширение F, v2.2
  • Расширение D, v2.2
  • Расширение Q, v2.2
  • Расширение C, v2.0
  • Скалярные криптографические расширения Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh (группы Zk, Zkn и Zks), v1.0
  • Эмуляция виртуального энтропийного источника Zkr, v1.0
  • Расширение V, v1.0 (требуется 64-битный хост)
  • Расширение P, v0.9.2
  • Расширение Zba, v1.0
  • Расширение Zbb, v1.0
  • Расширение Zbc, v1.0
  • Расширение Zbs, v1.0
  • Расширения половинной точности с плавающей запятой Zfh и Zfhmin, v1.0
  • Расширение Zfa, v1.0
  • Расширение Zfinx, v1.0
  • Расширение целочисленного умножения Zmmul, v1.0
  • Расширения обслуживания кэш-блоков Zicbom, Zicbop, Zicboz, v1.0
  • Соответствие как RVWMO, так и RVTSO (Spike последовательно согласован)
  • Режимы Machine, Supervisor и User, v1.11
  • Расширение Hypervisor, v1.0
  • Расширение Svnapot, v1.0
  • Расширение Svpbmt, v1.0
  • Расширение Svinval, v1.0
  • Расширение Svadu, v1.0
  • Расширение Svade, v1.0
  • Расширение Sdext, v1.0-STABLE
  • Расширение Sdtrig, v1.0-STABLE
  • Расширение Smepmp, v1.0
  • Расширение Smstateen, v1.0
  • Расширение Smdbltrp, v1.0
  • Sscofpmf v0.5.2
  • Расширение Ssdbltrp, v1.0
  • Расширение Ssqosid, v1.0
  • Расширение Zaamo, v1.0
  • Расширение Zalrsc, v1.0
  • Расширение Zabha, v1.0
  • Расширение Zacas, v1.0
  • Расширение Zawrs, v1.0
  • Расширения Za64rs, Za128rs, v1.0
  • Расширение Zicfiss, v1.0
  • Расширение Zicfilp, v1.0
  • Расширение Zca, v1.0
  • Расширение Zcb, v1.0
  • Расширение Zcf, v1.0
  • Расширение Zcd, v1.0
  • Расширение Zcmp, v1.0
  • Расширение Zcmt, v1.0
  • Расширение Zfbfmin, v0.6
  • Расширение Zvfbfmin, v0.6
  • Расширение Zvfbfwma, v0.6
  • Расширение Zvabd, v0.7
  • Расширение Zvbb, v1.0
  • Расширение Zvbc, v1.0
  • Расширение Zvkg, v1.0
  • Расширение Zvkned, v1.0
  • Расширения Zvknha, Zvknhb, v1.0
  • Расширение Zvksed, v1.0
  • Расширение Zvksh, v1.0
  • Расширение Zvkt, v1.0
  • Расширения Zvkn, Zvknc, Zvkng, v1.0
  • Расширения Zvks, Zvksc, Zvksg, v1.0
  • Расширение Zvzip, v0.1
  • Расширение Zicond, v1.0
  • Расширение Zilsd, v1.0
  • Расширение Zclsd, v1.0
  • Расширение Zimop, v1.0

Версионирование и API

Проекты версионируются в первую очередь для указания того, когда API был расширен или стал несовместимым. В этом духе Spike стремится следовать схеме версионирования SemVer, в которой номера основных версий увеличиваются, когда вносятся обратно несовместимые изменения API; номера минорных версий увеличиваются, когда добавляются новые API; номера патч-версий увеличиваются, когда исправляются ошибки обратно-совместимым образом.

Основной публичный API Spike — это архитектура RISC-V ISA. Интерфейс C++ к внутренностям Spike в настоящее время не считается публичным API, и обратно несовместимые изменения этого интерфейса будут вноситься без увеличения номера основной версии.

Этапы сборки

Мы предполагаем, что переменная окружения RISCV установлена на путь установки инструментов 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

Если в вашей системе используется менеджер пакетов yum, вы можете заменить первый шаг на yum install dtc.

Этапы сборки на OpenBSD

Установите bash, gmake, dtc и используйте 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

Компиляция и запуск простой программы на C

Установите spike (см. Этапы сборки), riscv-gnu-toolchain и riscv-pk.

Напишите короткую программу на C и назовите её hello.c. Затем скомпилируйте её в RISC-V ELF-бинарный файл с именем hello:

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

Теперь вы можете запустить симуляцию программы поверх прокси-ядра:

root@kitploit:~
$ spike pk hello

Симуляция новой инструкции

Добавление инструкции в симулятор состоит из двух шагов:

  1. Опишите функциональное поведение инструкции в файле riscv/insns/<new_instruction_name>.h. Изучите другие инструкции в этом каталоге в качестве отправной точки.

  2. Добавьте код операции и маску кода операции в riscv/opcodes.h. В качестве альтернативы добавьте их в пакет riscv-opcodes, и он сделает это за вас:

    root@kitploit:~
     $ cd ../riscv-opcodes
     $ vi opcodes       // добавьте строку для новой инструкции
     $ make install
    
  3. Добавьте инструкцию в riscv/riscv.mk.in. В противном случае инструкция не будет включена в сборку и будет рассматриваться как недопустимая.

  4. Пересоберите симулятор.

Интерактивный режим отладки

Чтобы вызвать интерактивный режим отладки, запустите spike с флагом -d:

root@kitploit:~
$ spike -d pk hello

Чтобы просмотреть содержимое целочисленного регистра (0 — для ядра 0):

root@kitploit:~
: reg 0 a0

Чтобы просмотреть содержимое регистра с плавающей запятой:

root@kitploit:~
: fregs 0 ft0

или:

root@kitploit:~
: fregd 0 ft0

в зависимости от того, хотите ли вы вывести регистр как одинарной или двойной точности.

Чтобы просмотреть содержимое ячейки памяти (физический адрес в шестнадцатеричном формате):

root@kitploit:~
: mem 2020

Чтобы просмотреть содержимое памяти с виртуальным адресом (0 — для ядра 0):

root@kitploit:~
: mem 0 2020

Вы можете продвинуться на одну инструкцию, нажав клавишу Enter. Вы также можете выполнять инструкции до достижения желаемого равенства:

root@kitploit:~
: until pc 0 2020                   (остановиться, когда pc=2020)
: until reg 0 mie a                 (остановиться, когда регистр mie=0xa)
: until mem 2020 50a9907311096993   (остановиться, когда mem[2020]=50a9907311096993)

Кроме того, вы можете выполнять инструкции, пока равенство истинно:

root@kitploit:~
: while mem 2020 50a9907311096993

Вы можете продолжить выполнение бесконечно с помощью:

root@kitploit:~
: r

В любой момент во время выполнения (даже без -d) вы можете войти в интерактивный режим отладки с помощью <control>-<c>.

Чтобы завершить симуляцию из приглашения отладчика, нажмите <control>-<c> или:

root@kitploit:~
: q

Отладка с помощью Gdb

Альтернативой интерактивному режиму отладки является подключение с помощью gdb. Поскольку spike стремится быть похожим на реальное оборудование, для этого вам также понадобится OpenOCD. Мы будем использовать следующую тестовую программу:

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

Чтобы отладить эту программу, сначала запустите spike, указав ему прослушивать OpenOCD:

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

В отдельной оболочке запустите OpenOCD с соответствующим конфигурационным файлом:

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

В еще одной оболочке начните сеанс отладки 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) 
...

В терминале OpenOCD вы увидите:

root@kitploit:~
...
decoded text: Instruction sets want to be free!
semihosting: *** application exited with 0 ***
riscv.cpu halted due to breakpoint. Semihosting is active.
Скачать инструмент