2012-04-06 6 views
7

$espポインタを上書きしようとすると、次の問題が発生しましたか?Ubuntuでスタックをスムーズ11.10

もちろん、正当なバッファサイズを試すのはいつもうまくいきます!しかし、$espを上書きするようにバッファサイズを増やし、成功すると$espの最初のバイト、2番目のバイト、または3番目のバイトに触れると、それは完全に機能します。しかし、$espの4バイト全体を上書きしようとすると、その内容とアドレスが完全に変更されます。私はバッファを埋めるために "A"を使用したので、これ以上41は表示されません。私はスクリーンショットを添付したかもしれないが、それはもっと詳細に説明するかもしれない。皆さんありがとう。

#include <stdio.h> 
#include <string.h> 
int main(int argc, char** argv) 
{ 
    char buffer[500]; 
    strcpy(buffer, argv[1]); 
    return 0; 
} 

smash attempt

答えて

5

これは、32ビットの非PAE UbuntuのカーネルでNX emulationの実装に関連して、CPU例外が発生したとき。 NXエミュレーションラインの下のメモリ領域(すなわち、エミュレートされたNX領域内の「内」:にあるこのバイナリの0x08049000終了アドレスよりもアドレス0からプログラムテキストセグメントの最後まで)では、segfaultはEIPは実際の無効な住所に着陸しました。回線の上のアドレスの場合、障害は、障害につながる「ret」命令の代わりに、障害のあるアドレスにEIPを転送することなく、障害を報告する別のパスによってトリガーされます。あなたはGDBでこれを見ることができます

(gdb) x/1i $pc 
=> 0x8048454 <main+64>: ret  
(gdb) info reg esp 
esp   0xbffff54c  0xbffff54c 
(gdb) x/wx $esp 
0xbffff54c:  0x41414141 

また、故障がdmesg出力で報告されているかの違いを見ることができます。これは、「508」の試みに関連した出力です:

[ 585.913896] a.out[1528] general protection ip:8048454 sp:bff1e8ec error:0 in a.out[8048000+1000] 

そして、これは「507」のためです:あなたは、インストールPAEカーネルでsudo apt-get install linux-image-$(uname -r)-paeを起動した場合

[ 598.999760] a.out[1531]: segfault at 414141 ip 00414141 sp bfcac2c0 error 4 in libc-2.13.so[5e7000+178000] 

、とあなたはPAEを持っています(NXエミュレーションはハードウェアNXのために無効になるので)予想される動作が表示され、4回の試行すべてが予想されるEIPとセグメンテーションされます。

関連する問題