2

関数を使用して SIGSEGV (セグメンテーション フォールト用) を登録していsigaction()ます。すべてのケースで機能しますが、1 つのケース、つまりスタックがオーバーフローしている場合を除きます。この問題を解決するために検索しました。次に、答えが得られました。代替スタックを割り当てる必要があります。しかし、シグナル登録のために代替スタックを割り当てる方法がわかりません。セグメント障害の代替スタックを段階的に割り当てるのを手伝ってください。

4

2 に答える 2

2

でできますsigaltstack

stack_t stack = {
    .ss_sp = malloc(SIGSTKSZ),
    .ss_size = SIGSTKSZ,
    .ss_flags = 0
};

if (sigaltstack(&stack, NULL))
    perror("sigaltstack");

この時点で、シグナル ハンドラを確立してsigactionを使用するだけsa_flags = SA_ONSTACKです。

于 2013-10-02T18:39:16.720 に答える
-1

最初にsigaltstack ()で代替スタックを確立します。

次に、シグナル ハンドラーをインストールするときに、sigactionsa_flags () を使用し、構造体 sigaction のメンバーにSA_ONSTACK を設定します。

于 2013-10-02T18:38:49.073 に答える