Skip to content

Latest commit

 

History

History
48 lines (30 loc) · 2.71 KB

File metadata and controls

48 lines (30 loc) · 2.71 KB

言語: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية

← DynCode コンパイラ

カーネルモード(Ring-0)DynCode サポート

-fdyncode は当初 ring-3 ペイロードのみをカバー。Ring-0 ペイロード(Windows ドライバ、Linux/Android カーネルモジュール、macOS kext)は ring-3 ABI を再利用できない:TEB/PEB が存在しない、syscall 命令はユーザー→カーネルのトラップ、x86_64 ではコードモデルとレッドゾーンの無効化が追加で必要。

1. コアスイッチ:-mdyncode-context={user,kernel}

  • ユーザーモード(デフォルト):既存 PEB / syscall stub パイプラインを維持。
  • カーネルモード:SyscallStubPass / WinPEBImportPass 無効化、カーネルフラグ注入、KernelImportPass 起動、__NEVERC_DYNCODE_KERNEL__ 注入。

2. TargetDesc 新フィールド

Level(User/Kernel)、KernelImportKernelInjectFlags。カーネルサポート追加は「テーブル 1 行追加」。

3. プラットフォーム別ドライバフラグ

次元 x86_64 カーネル AArch64 カーネル
レッドゾーン -mno-red-zone 自然に不在
コードモデル -mcmodel=kernel 既存 -mcmodel=small 再利用
暗黙 SIMD -mno-sse -mno-sse2 -mno-mmx -mgeneral-regs-only

4. KernelImportPass:自動リゾルバ注入

未解決 extern 直接呼出をリゾルバ支援間接呼出に自動リライト。ユーザーは普通の C を書く。暗黙 (resolver, cookie) パラメータをエントリに注入。FNV-1a 64 ビットハッシュ。三層防御(IR → MIR → 抽出器)。

5–6. Android カーネル、ヘッダ分割

Ring-3 は bionic + Linux syscall ABI;Ring-0 は純 Linux カーネル。<neverc/dyncode/kernel.h> がカーネルモード API を提供。

7. Ring-0 DynCode の記述

7.1 純計算ペイロード

#include <neverc/dyncode/kernel.h>
NEVERC_KERNEL_ENTRY
int dyncode_entry(int a, int b) { return a * 13 + b * 7; }

7.2 リゾルバベースペイロード

neverc_kern_resolve_t resolverneverc_kern_hash("printk") でカーネル関数を解決。

8. ロードマップ

カーネルコンテキスト切替、リゾルバリライト、純計算/リゾルバペイロードすべて完了。カーネル SDK ヘッダサブセットは計画中。