スタックオーバーフローのコアダンプ

スタックオーバーフローによって引き起こされる1は、多くの場合、再帰呼び出しされているコアで生じます。

   GDBの機能があるときに参照してください。

     、不足して読めなく現在のスタックアドレスをスタック。スタックの特性に応じて逆に成長している、あなたはアドレスで場所を見つけるために、スタックを増やすことができます(スタックを成長逆なので、カバレッジ配列のような関数のリターンアドレスをオーバーフローしやすい、アドレスエラーは、関数が終了します)。

     再帰関数が形成された対応する複数の呼び出しを一緒に多くの場合、重複したアドレスを繰り返しています効果的なスタックを発見した後、これは実際には関数のアドレスに応じて、再帰によって引き起こされるが見つけることができます。形成された再帰的プロセスのさらなる分析。

 

2.コアスタックオーバーフロー開始剤は、単一のスタックが過大となるで存在することができます。

    gdbが同じスタックが欠落している参照が、これはない関数呼び出しが、原因であるため、多くの場合、問題が出てくるために割り当てられた現在のコード行での変数です。

    以前に問題が発生していた、あなたは、通常の条件の下でプロセスを開始することができますが、(他のプロセスによって引っ張られるような)特定の状況下でコアオフになり、コアの場所がちょうど主な機能に入っている、私は非常にモンゴルを感じます。

        最終的な分析結果は、テンプレートをローカルオブジェクトに気付かなかった配布前にパッケージ化されているため、主な機能は、ターゲットを生成生成することである直下です。このオブジェクトの実際の発見は、実際にLinuxのデフォルトのスタックサイズを超える80メガバイトを持っています。スタックはulimitのスタックのサイズを変更して、他のプロセスにプロセスを引き上げ-s設定されている場合、それは、独自のスタートアップスクリプトを使用して、起動時に80メガバイト以上に親プロセスへの直接の後継満たすことができないされている場合には、プロセスをリードしませんが開始します。

 

3. はulimit -sプロセスのスタック領域のサイズに影響を与えませんが、唯一のメインスレッドがシェルを通して引っ張られているので、それだけで、プロセスのメインスレッドのスタック領域に影響を与える可能性があることに注意し、様々なサブプロセススレッドは、メインスレッドによって作成された空間の子スレッドサイズは、メインスレッドによって制御され、APIを呼び出します。

4.コア信号11であるという事実に起因するスタックオーバーフロー、セグメンテーションフォールト。信号11、または正式「セグメンテーション違反」として知られるが、theprogramが割り当てられなかったメモリ位置にアクセスすることを意味する。That'susuallyバグプログラムです。そのアクセス割り当てられていないメモリは、プロセス内の物理メモリアドレス空間にマップされていません。だから、スタックオーバーフローがすぐに必ずしもコアをしません。しかし、単にスタックオーバーフロー後のアドレスに行ってきましたか、プロセスがコアを対処する上で、割り当てではありません。 

glibcの割り当てメモリユニット128Kを介して、デフォルト、デフォルトで5のみ文字を割り当てても、メモリに割り当てられているだけでなく、128Kを割り当てています。しかし、プログラムがメモリの128Kを取っている、それはプロセス128Kのメモリ・マップを作成し、表示されますので、このオペレーティングシステムメモリが128Kであると思われるので、未割り当てアドレスは、コアになるプログラムへのアクセスを持っていませんプロセス。もちろん、このポットはglibcのではなく、オペレーティングシステムによってバックする必要があります。glibcの善意だけでなく、恥ずかしい行う前に、システムの動作圧力を減らすために割り当てられたブロックの数を減らします。

 

アナログスタックオーバーフローコアの例:

Linuxとは、コアにさよならを言う:スタックオーバーフロー

 

おすすめ

転載: www.cnblogs.com/dongzhiquan/p/core_because_stack_overflow.html