Ноль RAM с использованием C в Linux - PullRequest
2 голосов
/ 04 февраля 2011

Как можно обнулить неиспользуемую оперативную память в Linux в целях безопасности?Я написал эту простую программу на C, но я не знаю, будет ли ОЗУ, вызванная malloc, повторно использоваться в следующем цикле или будет использоваться новая ОЗУ.Надеемся, что через несколько минут все ОЗУ будет обнулено.

#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
    }
}

Ответы [ 5 ]

3 голосов
/ 04 февраля 2011

В Linux уже есть процесс ядра, который обнуляет память с помощью циклов простоя, поэтому он будет иметь память, готовую для передачи процессам, которые ее запрашивают.

Ваш цикл может обнулять или не обнулять другую память в зависимости от конкретного malloc реализация.Если вы действительно хотите написать процесс, подобный описанному, изучите использование sbrk напрямую, чтобы убедиться, что вы включаете и выключаете память.Бьюсь об заклад, если вы проверите, вы обнаружите, что каждый байт, данный вам sbrk, уже равен нулю.

1 голос
/ 04 февраля 2011

Пока вы никогда не обращаетесь к неинициализированной памяти, вам не нужно беспокоиться о том, что осталось позади. Пока вы никогда не освобождаете память до ее обнуления, вам не нужно беспокоиться о том, что вы оставили позади.

1 голос
/ 04 февраля 2011

Вы не можете обнулить системную RAM.Система владеет им.Если вы хотите запустить систему, которая обнуляет ОЗУ, вам нужно написать собственную ОС!

0 голосов
/ 15 июля 2011

Обычно в моей системе (2.6.36) я могу освободить всю неиспользованную (но выделенную) память, просто выполнив некоторое время (1) malloc ();цикл, и убивает его, когда он прекращает выделять память.

0 голосов
/ 04 февраля 2011

Я думаю, вам нужно написать модуль ядра, чтобы действительно сделать это надежно.И тогда вы все равно можете только обнулить неиспользуемые страницы.Обратите внимание, что страницы, которые использовались другими процессами, будут автоматически очищаться ядром при выделении.

Что вы пытаетесь сделать?Избегать холодных атак?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...