1

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

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

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

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

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

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

4

1 回答 1

2

我现在正在尝试做同样的事情-我不知道您使用的是什么操作系统,但我找到了以下文档(@ http://freebsd.active-venture.com/FreeBSD-srctree/newsrc/dev/vinum /vinummemory.c.html)用于freebsd,它简单地描述了jmpbuf结构:

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,这将解释你的情况下的段错误......

于 2011-05-31T13:39:39.693 回答