buffer overflow

「buffer overflow」の編集履歴(バックアップ)一覧はこちら

buffer overflow」(2008/04/06 (日) 18:38:19) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*目的 Electric Fenceを使ってheapの不正アクセスを検出する *コード このsourceは10文字分しか確保していないのに20文字分使っています #include <stdio.h> #include <string.h> #include <malloc.h> int main() { char *buf; int i; buf = (char*)malloc(10); for (i = 0; i < 20; i++) { fprintf(stderr, "%d\n", i); buf[i]=i; } return(0); } *実行 $ gcc -o mem mem.c -g $ ./mem # 不正なメモリアクセスをしているのに正常終了する $ sudo apt-get install electric-fence # electric fenceをインストール $ LD_PRELOAD=/usr/lib/libefence.so ./mem # 起動時にshared libraryをloadしmemを実行する 0 1 2 3 4 5 6 7 8 9 10 11 12 Segmentation fault (core dumped) # 10byte確保しても4byte境界によって12byteにalignmentされるため12で落ちる $ env EF_ALIGNMENT=1 LD_PRELOAD=/usr/lib/libefence.so ./mem # alignmentをoffしmemを実行 0 1 2 3 4 5 6 7 8 9 10 Segmentation fault (core dumped)
*目的 Electric Fenceを使ってheapの不正アクセスを検出する *コード このsourceは10文字分しか確保していないのに20文字分使っています #include <stdio.h> #include <string.h> #include <malloc.h> int main() { char *buf; int i; buf = (char*)malloc(10); for (i = 0; i < 20; i++) { fprintf(stderr, "%d\n", i); buf[i]=i; } return(0); } *実行 $ gcc -o mem mem.c -g $ ./mem # 不正なメモリアクセスをしているのに正常終了する $ sudo apt-get install electric-fence # electric fenceをインストール $ LD_PRELOAD=/usr/lib/libefence.so ./mem # 起動時にshared libraryをloadしmemを実行する 0 1 2 3 4 5 6 7 8 9 10 11 12 Segmentation fault (core dumped) # 10byte確保しても4byte境界によって12byteにalignmentされるため12で落ちる $ env EF_ALIGNMENT=1 LD_PRELOAD=/usr/lib/libefence.so ./mem # alignmentをoffしmemを実行 0 1 2 3 4 5 6 7 8 9 10 Segmentation fault (core dumped) buffer underflow env EF_PROTECT_BELOW=1 LD_PRELOAD=/usr/lib/libefence.so ./mem | EF_PROTECT_FREE 1 | free() 後のアクセス不許可 | | EF_ALLOW_MALLOC_0 0 | malloc(0) の不許可 | | EF_PROTECT_BELOW 0 | ヒープの上へのアクセス不許可 | | EF_PROTECT_BELOW 1 | ヒープの下へのアクセス不許可 |

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。