C 利用jmp_buf结构中的缓冲区溢出

C 利用jmp_buf结构中的缓冲区溢出,c,linux,buffer-overflow,setjmp,C,Linux,Buffer Overflow,Setjmp,我需要帮助来利用jmp_buf结构上的缓冲区溢出 我在堆栈上有以下值(由gdb看到): 第二个是下一个IP(在setjmp之后),但是如果我修改它,我不会更改程序的行为 我注意到,只有修改最后一个流的值,才能更改流(并获得分段) 但是,我无法理解最后一个单词的含义以及如何更改它以获得所需的行为。我正在尝试做同样的事情-我不知道您正在使用什么操作系统,但我发现以下文档 (@)对于simpy描述jmpbuf结构的freebsd: struct JmpBuf { int jb_ebx; //i

我需要帮助来利用jmp_buf结构上的缓冲区溢出

我在堆栈上有以下值(由gdb看到):

第二个是下一个IP(在setjmp之后),但是如果我修改它,我不会更改程序的行为

我注意到,只有修改最后一个流的值,才能更改流(并获得分段)


但是,我无法理解最后一个单词的含义以及如何更改它以获得所需的行为。

我正在尝试做同样的事情-我不知道您正在使用什么操作系统,但我发现以下文档 (@)对于simpy描述jmpbuf结构的freebsd:

struct JmpBuf {
    int jb_ebx; //in your case --> 0xb7fd8ff4      
    int jb_esp; //in your case --> 0x080485a0
    int jb_ebp; //in your case --> 0x080483f0      
    int jb_esi; //in your case --> 0xbffffcf8
    int jb_edi; //in your case --> 0xebf06081      
    int jb_eip; //in your case --> 0x1d0a15ee
    };

因此,0x080485a0将是存储的ESP,而不是解释您案例中SEGFULT的EIP

希望这需要一个“家庭作业”标签?嗨,谢谢你的回答。。!我发现了相同的jmp_buf描述..问题是我确定地址0x080485a0是setjmp调用时的下一条指令,0x1d0a15ee(应该是EIP)指向“天知道在哪里”,或者可能是偏移量,或者其他东西。。我真的不明白它是怎么工作的,我还试着反汇编longjmp函数..但我不明白。。不过,非常感谢您的回答!你好我昨天在ubuntu 10.4LTS 32位系统上创建了一个跳远漏洞。因此,我读了很多关于这方面的文章,发现不同操作系统的实现有很大不同。你在用什么操作系统?也许我也能帮你使用ubuntu?
struct JmpBuf {
    int jb_ebx; //in your case --> 0xb7fd8ff4      
    int jb_esp; //in your case --> 0x080485a0
    int jb_ebp; //in your case --> 0x080483f0      
    int jb_esi; //in your case --> 0xbffffcf8
    int jb_edi; //in your case --> 0xebf06081      
    int jb_eip; //in your case --> 0x1d0a15ee
    };