Использование переполнения буфера в структуре jmp_buf - PullRequest
1 голос
/ 28 мая 2011

Мне нужна помощь для использования переполнения буфера в структуре jmp_buf. * ​​1001 *

У меня есть следующие значения в стеке (видно по GDB):

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

Второй - это следующий IP-адрес (после setjmp), но если я изменяю его, я не изменяю поведение моей программы.

Я заметил, что могу изменить поток (и получить сегментацию), только если я изменю значение последнего.

Но я не могу понять значение последнего слова и то, как его изменить, чтобы получить желаемое поведение.

1 Ответ

2 голосов
/ 31 мая 2011

Я сейчас пытаюсь сделать то же самое - я не знаю, какую ОС вы используете, но я нашел следующий документ (@ 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, который объяснит ошибку в вашем случае ...

...