1

/ proc / kallsymsを調べて、 sys_call_tableのアドレスを見つけることができました。私は次のコードを持っています:

void **sys_call_table;

#include <linux/kernel.h>
#include <asm/unistd.h>

void Java_com_example_testlib_LibLoader_test() {
    sys_call_table = (void *) 0xc023cd28;
    LOGD("backup original sys_open %p", sys_call_table[__NR_open]);
}

問題は、コードが原因でFatal Signal Exeptionsys_call_tableエントリ sys_call_table[__NR_open]
を取得しようとしたときにエントリ0、1、2、...も取得しようとしたことです。

4

1 に答える 1

0

答えは、Crhisが「ユーザーモードプログラムからカーネルを変更することはできません!」と言ったようなものです。

LKMとしてコンパイルし、insmodコマンドを使用してロードしましたが、機能しました

PS:LKMモジュールだけが読み取ることができることもわかりました/proc/kallsyms。Android 4.1のカーネルパッチにより、ユーザースペースプログラムはこれを実行しなくなりました。/proc/sys/kernel/kptr_restrictカーネルアドレスのリークを回避するために導入されました。

したがって、ユーザースペースプログラムがkallsymアドレスを認識できるようにするには、kptr_restrictを0または1に設定します。

echo 1 > /proc/sys/kernel/kptr_restrict

情報はここで見つけることができます: https ://blog.duosecurity.com/2012/07/exploit-mitigations-in-android-jelly-bean-4-1/

そしてここに:http://insitusec.blogspot.sg/2013/01/kallsyms-on-android.html

于 2012-09-06T03:42:15.587 に答える