2011-02-03 10 views
2

セキュリティ上の理由から、Linuxで未使用のRAMをゼロにするにはどうすればよいですか?私はこのシンプルなCプログラムを書いていますが、mallocによって呼び出されたRAMが次のループで再利用されるのか、新しいRAMが使用されるのかはわかりません。うまくいけば、数分後にRAM全体がゼロになっているはずです。LinuxでCを使用しているゼロ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 
    } 
} 

答えて

1

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

3

Linuxにはすでに、アイドルサイクルを使用してメモリをゼロにしているカーネルプロセスがあります。そのため、それを要求するプロセスにメモリを用意する準備ができています。

ループは、特定のmallocの実装に応じて、異なるメモリをゼロまたはゼロにすることがあります。記述したようなプロセスを実際に作成したい場合は、sbrkを直接使用して、プロセス内外でメモリを循環させるようにしてください。あなたが受け取ったすべてのバイトがsbrkですでにゼロであることを確認すれば賭けます。

+2

'sbrk'は常にゼロで初期化されたページを与えます。 –

+0

私はLinuxがこれをしたことに気づいていませんでした。あなたは参照を提供できますか? –

0

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

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

1

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

0

通常、私のシステム(2.6.36)では、while(1)malloc()を実行するだけで、未使用の(割り当てられた)メモリをすべて解放することができます。ループを作成し、メモリーの割り振りを中止したときに終了させます。

関連する問題