c/C++でコールスタックを破損する通常のコードはありますか? 私は一種のハックや何か、ちょっとした見落としミスや何かを意味するのではなく、毎回ダメージを与えるようなランダムなものではありません。 誰かが私に、元社員は管理していましたが、私はそれが可能だとは思わないと言いました。 誰かにこのような経験がありますか?コールスタックにダメージを与えるC/C++コード
3
A
答えて
6
はい、簡単です。実際、非常に一般的な問題の1つです。これを考慮してください:
void foo()
{
int i;
int *p = &i;
p -= 5; // now point somewhere god knows where, generally undefined behavior
*p = 0; // boom, on different compilers will end up with various bad things,
// including potentially trashing the call stack
}
ローカルアレイ/バッファの境界外アクセスの多くは、ゴミ箱になります。
6
はい。多くのプラットフォームでは、ローカル変数はコールスタックとともに格納されます。その場合には、ローカル配列の外の書き込みが破損していることに非常に簡単な方法です:
void evil() {
int array[1];
std::fill(array, array+1000000, 0);
return; // BOOM!
}
は、ローカル変数への参照を返し、もっと微妙が破損する可能性があり、後に呼ばれています関数のスタック:
int & evil() {
int x;
return x;
}
void good(int & x) {
x = 0;
return; // BOOM!
}
void innocent() {
good(evil());
}
これらの(実際にはスタックを破損する可能性のある)いずれも合法ではありません。コンパイラはそれらを診断する必要はありません。幸いなことに、適切な警告を有効にする限り、ほとんどのコンパイラはこれらのエラーを検出します。
+0
リンカーとしての私のC変種は、double evil(double a)を見つけます。 ... file1.h 'ダブル悪(ダブルA)は、' FILE1.Cの#include "file1.h" ダブル悪(ダブルA){* 5を返す;} ' main.cの の#include
関連する問題
- 1. テクスチャにダメージを与えずにオブジェクトの色を変更する
- 2. ダメージを与えずにSDカードにプログラムログを出力する方法
- 3. Java JARファイルがシステムにダメージを与える可能性はありますか?
- 4. コンストラクタの最後にスロー例外がオブジェクトにダメージを与えますか?
- 5. !clrstack -pコールスタックのメソッドのパラメータの値を与えない
- 6. Pythonでnewbieコードを使ってtime.sleep()を実行すると、システムにダメージを与えることはできますか?
- 7. PowerShellのコードは、テキスト与えるエラー
- 8. ダメージを計算するGetComponent
- 9. Proセグメンテーションフォールトを与えるデータベースに接続するCコード
- 10. C++関数のコールスタックの切り替え
- 11. コードにデータを持たないオブジェクト統計を与えるiOS
- 12. メソッド名に影響を与えるコードの変更。
- 13. 私のコードにイベントログのアクセス許可を与える
- 14. 配列の簡単なコードは、私にランタイムエラーを与える
- 15. 与えられたコードでマウスオーバーイベントを接続するには?
- 16. 与えられた文法のANTLRコード
- 17. 与えられたコードのコードカバレッジ
- 18. パフォーマンスに影響を与えずにコード行を減らす
- 19. セマフォにIDを与える
- 20. アセンブリにFullTrustを与える
- 21. NSTextFieldにフォーカスを与える - ?
- 22. drush ccは私がルートフォルダにいるときでも2つのオプションしか与えません
- 23. スタックトレースは名前をアンダースコアでコールスタックに置き換えます
- 24. jQueryコールスタック?
- 25. CPANにmakeとccへのパスを伝える方法
- 26. MeteorJSがすでに同じコンピュータにインストールされている場合、NodeJSをインストールできますか?流星にダメージを与えますか?
- 27. このCコードは、コードブロック内にセグメンテーションフォールトを与え続けます
- 28. 以下のコードは私に "adviceDidNotMatch"を与えています
- 29. このコードは私にエラーを与え続け、
- 30. 私のコードは常に同じ乱数を与えます
C/C++でコールスタックを破損するのは非常に簡単です。それは多くの人々がそれらを憎む理由です。 – iammilind