2.4(またはそれ以降?)では、シンボルはエクスポートされsys_call_table
なくなり、フックシステムの呼び出しがより困難になります。
IDT から読み取ることでこの情報を引き続き取得できることを無視し、/boot/System.map-<kernel-version>
このアドレスが再起動とマシン(同じカーネルバージョンを使用)の間で一定のように見える理由が何であるか疑問に思います。ダイナミックに作る価値はありませんか?静的でなければならない理由はありますか?
私の目標は次のとおりです。
sys_call_table
フッキングシステムコールをより難しくするためにもはやモジュールにエクスポートされなくなりますが、モジュール(カーネル空間プログラムなど)はアドレスが実行されているすべてのシステムで同じように見えますSystem.map
。できます。 on 同じバージョンのカーネル。
ベストアンサー1
カーネルバージョン4.8以降、少なくともx86では、システムコールテーブルのアドレスを含むカーネルアドレス空間がランダムに指定されています。バラよりRANDOMIZE_BASE
カーネル構成で基本的な詳細をご覧ください。
これは、指定されたアドレスがSystem.map
役に立たず、システムコールテーブルのアドレスが起動するたびに変更されることを意味します。何かをデバッグし、それを使用するにはカーネルコマンドライン引数で起動してKASLRを無効にする必要がSystem.map
あります。nokaslr