Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
riscv-isa-sim — محاكي مجموعة تعليمات RISC-V وظيفي يدعم امتدادات متعددة (RV32/64، V، التشفير) مع وضع تصحيح تفاعلي، وتكامل GDB، ونمذجة على مستوى التعليمات للتطوير المشترك بين العتاد والبرمجيات واستكشاف المعمارية. | Kitploit
أدوات/GitHubGitHub/riscv-software-src/riscv-isa-sim
أمان الأنظمة المدمجةالهندسة العكسيةمصممي الأخطاءأمن الأجهزةالتعلم والتعليمتحليل البرامج الثابتة
GitHubriscv-software-src/riscv-isa-sim

riscv-isa-sim

محاكي مجموعة تعليمات RISC-V وظيفي يدعم امتدادات متعددة (RV32/64، V، التشفير) مع وضع تصحيح تفاعلي، وتكامل GDB، ونمذجة على مستوى التعليمات للتطوير المشترك بين العتاد والبرمجيات واستكشاف المعمارية.

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودعالموقع الإلكتروني
3.2k1.1kمنذ 0 أيامتمت المراجعة من قبل Kitploit

Spike RISC-V ISA Simulator

حول

Spike، محاكي مجموعة تعليمات RISC-V، ينفذ نموذجًا وظيفيًا لواحد أو أكثر من أنوية RISC-V. تمت تسميته على اسم المسمار الذهبي المستخدم للاحتفال بإكتمال السكك الحديدية العابرة للقارات في الولايات المتحدة.

يدعم Spike ميزات RISC-V ISA التالية:

  • RV32I و RV64I قواعد ISAs الأساسية، v2.1
  • RV32E و RV64E قواعد ISAs الأساسية، 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 متسق تسلسليًا)
  • أوضاع الآلة والمشرف والمستخدم، v1.11
  • إضافة المراقب الافتراضي، 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

الإصدارات وواجهات البرمجة

يتم إصدار الإصدارات بشكل أساسي للإشارة إلى وقت توسيع واجهة البرمجة أو جعلها غير متوافقة. وبهذا المعنى، يهدف Spike إلى اتباع مخطط إصدار SemVer، حيث يتم زيادة أرقام الإصدارات الرئيسية عند إجراء تغييرات غير متوافقة مع الإصدارات السابقة في واجهة البرمجة؛ ويتم زيادة أرقام الإصدارات الثانوية عند إضافة واجهات برمجة جديدة؛ ويتم زيادة أرقام إصدارات التصحيح عند إصلاح الأخطاء بطريقة متوافقة مع الإصدارات السابقة.

واجهة البرمجة العامة الرئيسية لـ Spike هي مجموعة تعليمات RISC-V. واجهة C++ للأجزاء الداخلية لـ Spike لا تعتبر واجهة برمجة عامة في هذا الوقت، وسيتم إجراء تغييرات غير متوافقة مع الإصدارات السابقة على هذه الواجهة دون زيادة رقم الإصدار الرئيسي.

خطوات البناء

نفترض أن متغير البيئة 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!";

// لا تستخدم المكدس، لأن sp ليس مضبوطًا.
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.
تنزيل الأداة