
C/C#で書かれた組み込みシステム向けC2ソフトウェア
Oni framework は、組み込みデバイスソフトウェア開発のためのプラットフォームです。組み込みデバイスのリモートデバッグや機能追加のために使用されます。現時点での主なコンセプトは、完全にモジュール化されたプラグインシステムと、ローカルおよびリモートのRPCです。これはring-0特権レベルで動作するように設計されていますが、少し調整すればring-3レベルでも使用できます。警告しておきますが、これは本番環境用ではありません。研究用の簡単なビルドプラットフォームを求める開発者専用です。
計画中の機能:
Oni-Frameworkは、このディレクトリをチェックアウトし、要求されるすべての実装を oni/utils/kdlsym/default.h ファイルに実装するだけで済みます。その後、gcc または clang で問題なくコンパイルでき、実行可能ファイルが生成されるはずです。実行方法はBYO(各自で用意)とする必要がありますが、ほとんどの組み込みデバイスでは、sshシェル、telnet経由のシェル、または任意のシェルで実現できます。他のデバイスでは、実行中のメモリコンテキストにロードしてから main にジャンプする必要があるかもしれません。main がすべての初期化の問題を処理します。
git clone https://github.com/kiwidoggie/oni-framework.git
a. 任意: FreeBSDヘッダーの場所を設定します export BSD_INC="/path/to/freebsd/headers/include"make create を実行する必要がありますmake を使用してビルドします
a. 環境変数を設定していない場合は、make BSD_INC=/path/to/freebsd/headers/include でビルドできますOni-Frameworkは完全な機能を持つlibcに依存しておらず、すべての前提条件が満たされていれば、完全にスタンドアロンでビルドおよび実行できるように作られています。その代わり、必要な機能は、実行中のプロセスのコンテキストまたはカーネルコンテキスト(テスト済みなのは後者のみ)に存在する必要最低限の関数から組み立てられます。
include/oni/utils/kdlsym/my_platform.h に新しいヘッダーを作成して、新しいkdlsym(カーネル動的シンボル解決)ターゲットを作成しますinclude/oni/utils/kdlsym/default.h の内容を、新しく作成したヘッダーファイルにコピー&ペーストしますinclude/oni/utils/kdlsym.h に追加します#if ONI_PLATFORM==ONI_UNKNOWN_PLATFORM
#include "kdlsym/default.h"
#elif ...
#elif ONI_PLATFORM==ONI_MY_PLATFORM
#include "kdlsym/my_platform.h"
#endif
include/oni/config.h にある設定ファイルに追加します// Unknown device
#define ONI_UNKNOWN_PLATFORM -1
#define ONI_MY_PLATFORM 5
#define ONI_PLATFORM ONI_UNKNOWN_PLATFORM を #define ONI_PLATFORM ONI_MY_PLATFORM に変更します貢献したい場合は、プルリクエストを送信してください。それ以外の場合、現時点ではこれに対する実際のサポートはありません。これは将来変更される可能性があります
| Bit Offset | Bit Length | Name | Description | Usage |
|---|
| 0 | 3 | Magic | これは、メッセージが正しく処理されていることを保証するための単純なパケットヘッダーマジックです | 必須: 0101bまたは5(10進数)に設定する必要があります |
| 3 | 4 | Message Category | これは、oni-framework側でメッセージをどのカテゴリにルーティングするかを示します | 必須: 最大14カテゴリ(現在は5つ使用中) |
| 7 | 32 | Error/MessageType | このフィールドには、エラーコードまたはメッセージタイプが含まれます | リクエスト: これは現在CRC32(MessageName)で計算されるメッセージタイプに設定する必要があります。レスポンス: これはエラーコード/戻り値に設定されます |
| 39 | 16 | Payload Size | これはメッセージヘッダーの後に続くデータの長さです | 任意: ペイロードがない場合は0に設定します。それ以外の場合はデータを想定します |
| 55 | 1 | Request | このフラグは、メッセージがリクエストの場合は1に、レスポンスの場合は0に設定されます | 必須 |
| 56 | 7 | Reserved | 予約済み | 無視: 0に設定 |