言語: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
kallsyms_lookup_name による動的シンボル解決を備えたドライバテンプレート。register_kprobe/unregister_kprobe(GKI 安定 ABI)のみインポート。単一ソースで GKI 5.10–6.12 全対応。
cd examples/android-kernel-driver
neverc make # debug: -g(初回ビルドの既定値)
neverc make release # release: -O2 --strip
neverc make debug # debug に戻す別のカーネルプリセットは、たとえば
neverc make KERNEL=612 release で選択します。neverc make release は
-O2 --strip を選びます。Makefile は選択した KERNEL と PROFILE を
.nvk-build-flags に記録するため、以後の make push、make run、
ターゲットなしの make は同じ成果物を使います。この状態ファイルがなければ、
make の既定値は debug です。make debug または明示的な PROFILE=... は
保存済みのプロファイルを更新し、make clean は状態ファイルを削除して次の
ビルドを debug に戻します。
NeverC は、IDA に着想を得つつ予約接頭辞を使わないリリース名を 5 種類
書き込みます。関数は fn_HEX、実行可能な無型ラベルは code_HEX、オブジェクトは
obj_HEX、その他の無型ラベルは sym_HEX、絶対シンボルは abs_HEX です。
通常の割り当て済み定義では、HEX は最終的な SHF_ALLOC セクション配置から
決定的に算出した analysis EA です(abs_HEX は代わりに絶対 st_value を
使います)。これは hash(ハッシュ)、encryption(暗号化)、file offset
(ファイルオフセット)、ELF virtual address(ELF 仮想アドレス)、runtime kernel
address(実行時カーネルアドレス)のいずれでもありません。NeverC は予約済みの
sub_/loc_ 形式も、意図的に空にした通常名も保存しません。
正確に保持する名前、IDA の合成 extern 表示、セキュリティ境界、最終処理と署名の
順序については、
リリースとストリップ方針を参照してください。
neverc make runまたは手動で:
adb push nvk_driver.ko /data/local/tests/
adb shell su -c 'insmod /data/local/tests/nvk_driver.ko'
adb shell su -c 'dmesg | grep neverc_krt_driver'デバイスで cat /proc/kmsg を実行すると、カーネル ring buffer をリアルタイムに追跡できます。Windows の DbgView に近い使い方です。insmod が曖昧なエラーだけを返すときや、vermagic・modversions・section サイズなど本当の拒否理由を確認するときに使います。
端末 1(そのまま実行):
adb shell
su
cat /proc/kmsg端末 2:
adb shell su -c 'insmod /data/local/tests/nvk_driver.ko'ロード直後の新しい行が端末 1 に流れます。Ctrl+C で停止します。
補足:Android によっては dmesg -w が使えません。/proc/kmsg は root が必要ですが、モジュール読み込みのデバッグには安定しています。
neverc make rmmodまたは手動で:
adb shell su -c 'rmmod neverc_krt_driver'