1

jmp_buf構造体のバッファオーバーフローを利用するための支援が必要です。

スタックには次の値があります(gdbで確認)。

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

2番目は次のIP(setjmpの後)ですが、それを変更してもプログラムの動作は変更されません。

最後の値を変更した場合にのみ、フローを変更できる(そしてセグメンテーションを取得できる)ことに気づきました。

しかし、最後の単語の意味と、それを変更して目的の動作を実現する方法がわかりません。

4

1 に答える 1

2

私は現在同じことをしようとしています-あなたが使用しているOSはわかりませんが、次のドキュメントを見つけました(@ 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ではありません。これはあなたの場合のセグメンテーション違反を説明します...

于 2011-05-31T13:39:39.693 に答える