4

だから私はバッファオーバーフローとスタックスマッシングに関するAlephOneの記事について読んでいます。彼のエクスプロイトコードのこの少しを除いて、私はすべてを理解していると思います:

ptr = buff;   
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
   *(addr_ptr++) = addr;

buffとptrはchar配列です。addrは、スタックの開始時にメモリ内の場所を指すスタックポインタを保持します。bsizeはバフのサイズです。何してるの?なぜ彼はi+= 4と言っているのですか?彼はaddr_ptrを何に等しく設定しているのですか、そしてその理由は何ですか?印刷しようとすると、NULLになります。

記事へのリンクは次のとおりです:http://insecure.org/stf/smashstack.html

ありがとう。

4

1 に答える 1

3

彼は、1 ワード (8 ビット * 4 バイト = 32 ビット ワード) を進めるために、毎回 4 バイトずつ移動しています。コード例の次の段落で、推測とテストの方法について彼がコメントしていることに注意してください。

彼は暗闇の中で撮影し、バッファをオーバーフローさせようとしています。addr_ptr は ptr のアドレスに設定され、for ループ内のバッファーに沿ってプッシュされます。

于 2012-10-04T00:01:46.583 に答える