2

セキュリティ上の理由から、Linux で未使用の RAM をゼロにするにはどうすればよいですか? この単純な C プログラムを作成しましたが、malloc によって呼び出された RAM が次のループで再利用されるか、新しい RAM が使用されるかはわかりません。うまくいけば、数分後に RAM 全体がゼロになります。

#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char *a = NULL; // declare variable

    while(1) // infinite loop
    {
        a = malloc(524288); // half a MB
        memset(a, 0, 524288); // zero
        free(a); // free

        sleep(1); // sleep for 1 second
    }
}
4

5 に答える 5

3

Linux には、アイドル サイクルを使用してメモリをゼロにするカーネル プロセスが既にあるため、メモリを要求するプロセスにすぐに渡すことができます。

特定のmalloc実装に応じて、ループは異なるメモリをゼロにする場合とゼロにしない場合があります。説明したようなプロセスを本当に書きたい場合は、sbrk直接使用して、プロセスの内外でメモリを循環させていることを確認してください。sbrkただし、チェックすると、与えられたすべてのバイトがすでにゼロであることがわかります。

于 2011-02-03T22:00:28.757 に答える
1

システム RAM をゼロにすることはできません。システムが所有しています。RAM をゼロにするシステムを実行したい場合は、独自の OS を作成する必要があります。

于 2011-02-03T21:59:51.680 に答える
1

初期化されていないメモリに決してアクセスしない限り、他の誰かが置き去りにしたものについて心配する必要はありません。ゼロにする前にメモリを解放しない限り、何を残したのか心配する必要はありません。

于 2011-02-03T22:02:07.127 に答える
0

通常、私のシステム (2.6.36) では、while(1) malloc(); を実行するだけで、未使用の (ただし割り当てられた) メモリをすべて解放できます。ループし、メモリの割り当てを停止すると強制終了します。

于 2011-07-15T16:59:02.460 に答える
0

実際にこれを確実に行うには、カーネルモジュールを作成する必要があると思います。そして、未使用のページをゼロにすることしかできませんでした. 他のプロセスによって使用されたページは、割り当て時にカーネルによって自動的にクリアされることに注意してください。

あなたは何をしようとしているのですか?コールド ブート攻撃を回避しますか?

于 2011-02-03T22:00:36.883 に答える