无法访问sys_call_table

时间:2012-09-03 10:08:35

标签: android linux linux-kernel

我设法通过查看 / 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 Exeption为什么要尝试获取 sys_call_table条目 sys_call_table[__NR_open]
我试图进入0,1,2,......也是。

1 个答案:

答案 0 :(得分: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