我需要帮助来利用jmp_buf结构上的缓冲区溢出。
堆栈上有以下值(由gdb看到):

0xbffffc40:     0xb7fd8ff4      0x080485a0      0x080483f0      0xbffffcf8
0xbffffc50:     0xebf06081      0x1d0a15ee

第二个是下一个IP(在setjmp之后),但是如果我修改它,我不会改变程序的行为。
我注意到,只有修改最后一个流的值,才能更改流(并获得分段)。
但是,我无法理解最后一个词的含义以及如何改变它以获得期望的行为。

最佳答案

我现在也在试着做同样的事情-我不知道你在用什么操作系统,但是我找到了下面的文档
(@http://freebsd.active-venture.com/FreeBSD-srctree/newsrc/dev/vinum/vinummemory.c.html)对于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,而不是EIP,这将解释您的情况下的segfult…

关于c - 利用jmp_buf结构中的缓冲区溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6157429/

10-13 07:29