Linux kernel linux系统调用劫持无效参数
我使用以下方法重新定义了系统调用:Linux kernel linux系统调用劫持无效参数,linux-kernel,system-calls,Linux Kernel,System Calls,我使用以下方法重新定义了系统调用: long my_sys_munmap(unsigned long addr, size_t len) { PR_DBG("addr(%p) len(%lu)\n", (void *)addr, len); ......................... static int my_make_page_rw(unsigned long addr) { unsigned int level; pte_t *pte =
long my_sys_munmap(unsigned long addr, size_t len)
{
PR_DBG("addr(%p) len(%lu)\n", (void *)addr, len);
.........................
static int my_make_page_rw(unsigned long addr)
{
unsigned int level;
pte_t *pte = lookup_address(addr, &level);
if(pte->pte &~ _PAGE_RW)
pte->pte |= _PAGE_RW;
return 0;
}
static int my_make_page_ro(unsigned long addr)
{
unsigned int level;
pte_t *pte = lookup_address(addr, &level);
pte->pte = pte->pte &~ _PAGE_RW;
return 0;
}
void my_ioc_patch_munmap(void)
{
my_make_page_rw((unsigned long)sys_call_table);
orig_sys_munmap = sys_call_table[__NR_munmap];
*(sys_call_table+__NR_munmap) = (void *)my_sys_munmap;
my_make_page_ro((unsigned long)sys_call_table);
}
但在这之后,我在我的系统地图中得到了以下跟踪线:
addr(91) len(449989154)
这意味着第一个参数是系统调用数(91)。我的地图原型是什么?我找不到合适的地址和地址 我忘了带链接指令
asmlinkage long my_sys_munmap( unsigned long addr, size_t len)
这是什么内核?什么架构(i386?)?您是否尝试过反汇编要替换的函数以查看它如何访问其参数?x86 Linux 3.14.37#15 SMP,asmlinkage指令解决了此问题