缓冲区溢出更改返回地址C-无主

缓冲区溢出更改返回地址C-无主,c,gcc,embedded-linux,buffer-overflow,shellcode,C,Gcc,Embedded Linux,Buffer Overflow,Shellcode,如何使eip寄存器指向内存地址,以便使用缓冲区溢出在以下程序中执行外壳代码 static int __init onload(void) { void function1(char *arg1) { char buffer[10]; strcpy(buffer, arg1); } char *kernel_version = kmalloc(MAX_VERSION_LEN, GFP_KERNEL); printk(KER

如何使eip寄存器指向内存地址,以便使用缓冲区溢出在以下程序中执行外壳代码

static int __init onload(void) 
{
    void function1(char *arg1)
    {
        char buffer[10];
        strcpy(buffer, arg1);
    }

    char *kernel_version = kmalloc(MAX_VERSION_LEN, GFP_KERNEL);
    printk(KERN_WARNING "Hello world!\n");
    // printk(KERN_EMERG "Version: %s\n",     acquire_kernel_version(kernel_version));

    find_sys_call_table(acquire_kernel_version(kernel_version));

    printk(KERN_EMERG "Syscall table address: %p\n", syscall_table);
    printk(KERN_EMERG "sizeof(unsigned long *): %zx\n", sizeof(unsigned long*));
    printk(KERN_EMERG "sizeof(sys_call_table) : %zx\n", sizeof(syscall_table));

    if (syscall_table != NULL) {
        //function1("AAAAAAAAAAAAAAAAAAAAAAAAAAAB7F41B63");

        original_write = (void *)syscall_table[__NR_write];
        syscall_table[__NR_write] = &new_write;
        write_cr0 (read_cr0 () | 0x10000);
.
.
so on...
}
这里是代码()的链接,上面我显示了需要创建缓冲区溢出并指向返回地址的位置

我尝试使用上面的代码使缓冲区溢出26个A,然后将我的返回地址指向“0xB7F41B63”,但它不会替换我的返回地址。而且我的代码不能在gdb中调试,所以有人能推荐一个调试器来逐步分析代码吗


PS:我的代码没有main,我尝试了另一个带有缓冲区溢出的main代码,但在这里,当我插入带有
#include
的main时,它给了我找不到stdio.h的错误。我安装了g++,但我无法升级/更新我的操作系统,因为我无法更改gcc版本。

您不能在此处替换回信地址。kmalloc不直接在堆栈上分配空间,因此不能覆盖返回地址。这里有一篇文章展示了如何利用类似情况:


您不能在此处替换回信地址。kmalloc不直接在堆栈上分配空间,因此不能覆盖返回地址。这里有一篇文章展示了如何利用类似情况:

请阅读-总结是,这不是一种向志愿者讲话的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。请阅读-总结是,这不是解决志愿者问题的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。