Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
riscv-isa-sim — 機能的なRISC-V ISAシミュレータで、複数の拡張機能(RV32/64、V、暗号)をサポートし、インタラクティブデバッグモード、GDB統合、命令レベルのモデリングを備え、ハードウェア・ソフトウェアの共同開発やアーキテクチャ探索に利用できます。 | Kitploit
ツール/GitHubGitHub/riscv-software-src/riscv-isa-sim
組み込みシステムセキュリティリバースエンジニアリングデバッガハードウェアセキュリティ学習と教育ファームウェア解析
GitHubriscv-software-src/riscv-isa-sim

riscv-isa-sim

機能的なRISC-V ISAシミュレータで、複数の拡張機能(RV32/64、V、暗号)をサポートし、インタラクティブデバッグモード、GDB統合、命令レベルのモデリングを備え、ハードウェア・ソフトウェアの共同開発やアーキテクチャ探索に利用できます。

リポジトリを見る
3.2k1.1k157日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

Spike RISC-V ISA シミュレーター

概要

Spikeは、RISC-V ISAシミュレーターであり、1つ以上のRISC-Vハートの機能モデルを実装しています。その名前は、アメリカ大陸横断鉄道の完成を祝うために使用された金色のスパイク(spike)に由来します。

Spikeは以下のRISC-V ISA機能をサポートしています:

  • RV32I および RV64I 基本ISA, v2.1
  • RV32E および RV64E 基本ISA, 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が追加された場合にマイナーバージョン番号が増分され、バグが後方互換性のある方法で修正された場合にパッチバージョン番号が増分されます。

Spikeの主要な公開APIはRISC-V ISAです。現時点では、Spikeの内部へのC++インターフェースは公開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

新しい命令のシミュレーション

シミュレーターに命令を追加するには、2つのステップが必要です:

  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. シミュレーターを再ビルドします。

対話型デバッグモード

対話型デバッグモードを起動するには、-dオプションを付けてspikeを起動します:

root@kitploit:~
$ spike -d pk hello

整数レジスタの内容を表示するには(0はコア0を示します):

root@kitploit:~
: reg 0 a0

浮動小数点レジスタの内容を表示するには:

root@kitploit:~
: fregs 0 ft0

または:

root@kitploit:~
: fregd 0 ft0

レジスタを単精度または倍精度で表示するかによって異なります。

メモリ位置の内容を表示するには(物理アドレスを16進数で):

root@kitploit:~
: mem 2020

仮想アドレスでメモリの内容を表示するには(0はコア0):

root@kitploit:~
: mem 0 2020

Enterキーを押すことで1命令ずつ進めることができます。また、特定の等号条件に達するまで実行することもできます:

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.
ツールをダウンロード