なんかいろいろこんぴゅーたかんけいのなぐりがき

なんか勉強しているこんぴゅーた関係のことのメモやそれ以外のことを書こうかなあ...

logs

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スタックオーバーフローによる戻り値の書き換え


#include<stdio.h>
#include<stdlib.h>
no_call()
{
printf("no_call was called!!\n");
exit(0);
}
call()
{
int buf[1];
buf[2] = (int)((void*)no_call);//overflow!!
}
main()
{
call();
}

このコードはスタックをオーバーフローさせて呼ばれるはずのないno_call関数を呼び出す。
実際にgccでコンパイルし、ubuntu8.04で実行すると
no_call was called!!
と表示される。

bufはサイズが1なのでbuf[0]しか実際には確保されない。
しかしこのコードではbuf[2]に無理やり関数へのポインタを代入して、mainへの戻り値を保存しているブロックを書き換えている。

スポンサーサイト

トラックバックURL

http://ilovevim.blog42.fc2.com/tb.php/9-dd12df85

この記事へのトラックバック

この記事へのコメント

コメント投稿フォーム

Paging Navigation

Navigations, etc.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。