問題タブ [stack-smash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 「Smashing The Stack For Fun And Profit」を適応させようとするとセグメンテーション違反が発生する
私は、「2011 年にスタックを破壊する」と並んで、古典的な論文「スタックを破壊して利益を得る」を追っています。これらの論文に関するすべての Q/A にもかかわらず、私の問題に対する答えが見つかりません。
私は単純な exit(0) コマンドを実行しようとしていますが、「Smashing The Stack For Fun And Profit」の shellcodeasm.c に似た呼び出しと jmp を使用して、紙を最後までたどることができます (これを機能させることができました)。呼び出しと jmp を削除したとき)。明らかに、次の shellcodeasm.c はシェルを開きませんが、「楽しさと利益のためにスタックを破壊する」の名前を守っているので、私のプロセスは簡単に理解できます。
shellcodeasm.c
gdb を実行gcc -o shellcodeasm -g -ggdb shellcodeasm.c
して使用し、main+3 から main の最後までの 16 進数を取得します (論文のように)。testsc.c を生成できます。
testsc.c
その後、「Smashing the Stack in 2011」のテクニックを使用してコンパイルおよび実行できます。
しかし残念ながら、セグメンテーション違反が発生します (ここにはバッファ オーバーフローがないため、 -fno-stack-protector は必要ないと思いますが、削除しても機能しません)。
私が理解していない/欠けていることを誰かが知っていますか?
isの出力とuname -a
isLinux core 3.2.0-4-686-pae #1 SMP Debian 3.2.73-2+deb7u3 i686 GNU/Linux
の出力gcc -v
ですgcc version 4.7.2 (Debian 4.7.2-5)
。関連するすべての情報を提供できたことを願っています。
c - スタック破壊エラー
ファイルからWebアドレスを読み取りGET
、ファイルに再度書き込まれるリクエストを実行するボットを作成することになっています。これはこれまでのところ機能しますが、プログラムは常に「スタック破壊エラー」で終了します。私は複数の「コンシューマー」スレッドを使用して作業を行い、すべてのGET
リクエストが完了して最初のスレッドが終了すると、プログラムは終了します。
以下は私のコードです:
私が得ているエラー:
* スタック破壊が検出されました * : ./bot が終了しました make: *** [実行] 中止されました
これは、最初のスレッドが終了した後に発生します。メモリに間違いがあるに違いないことはわかっていますが、なぜこのエラーが発生するのかわかりません。ここで何か不足していますか?また、他のヒントも高く評価されています!
c - 配列へのポインタを返すときのスタック破壊
私の関数neldermeadは次のようになります。
関数は次のように呼び出されます。
出力は次のとおりです。
-fno-stack-protectorを使用すると、コードは正常に動作します。
配列を返す方法に何か問題がありますか?
///////////////////////////////////
参照渡しを行うようにコードを修正しました。
私の関数neldermeadは次のようになります。
関数は次のように呼び出されます。
出力は次のとおりです。
くそー、役に立たなかった。
c - Aleph One 記事の作業中に 64 ビット システムでスタック割り当てがない
Aleph One の「Smash the Stack for Fun and Profit」をいじっていたところ、64 ビット プロセッサ用のコードをコンパイルしているときに、通常の「sub $VALUE, %」を使用してスタック メモリが割り当てられないことがわかりました。 REG.」
これは関数のソース コードです。
そして、これがコンパイルされたバージョンです
gcc で -m32 オプションを使用すると表示されるのに、標準のスタック割り当てがないのはなぜですか?
c - スタック バッファ オーバーフローを使用して情報を取得する (C)
ネットで興味深い演習を 1 つ見つけました。「シークレット」が標準出力に出力されるような方法で、特定の入力がバッファをオーバーフローする可能性があると記載されています。
自分なりに考えてみましたが、うまくいきませんでした。
コードは次のとおりです。
c - スタックスマッシング (C) とは何ですか?
コード:
出力:
string-1 長さ = 7、文字 *a = StringA StringB
*** スタック破壊が検出されました **** : /T02 が終了しました
中止 (コアダンプ)
スタックスマッシングが表示される理由がわかりません。*スタックスマッシングとは何ですか?それとも私のコンパイラのエラーですか?