Правильно спроектированная современная ОС должна быть разработана таким образом, чтобы вы не могли повредить ОС, запустив написанную вами программу. Обратите внимание на следует ; посмотрите на список CVE , где приведено множество примеров, где этого не произошло.
Модель угроз для большинства операционных систем, на которых вы можете разрабатывать, не защищает ваши личные файлы от запускаемой вами программы. См. XKCD 1200 . Однако вы можете принять меры предосторожности, такие как:
- Запуск программы с отдельным идентификатором пользователя
- , запуск программы на виртуальной машине
- или запуск программы. программа в среде
chroot
- или запуск программы во время действия Обязательного контроля доступа, который не позволяет программе записывать файлы за пределы указанного каталога или открывать сетевые сокеты (например, SE Linux)
- и путем правильного понимания программы и избежания таких ошибок, как эта
Риск также уменьшается благодаря следующим соображениям:
- Неинициализированный указатель скорее всего, будет ноль, следовательно, ноль, и, следовательно, вызовет ошибку сегментации, когда вы его используете; или если задано «случайное» значение, которое может указывать на не отображенную память, с тем же результатом
- Даже если вы изменили аргумент для последующего
std::fstream::open
(или open
из POSIX, или fopen
из C stdio API или какой-либо другой подобной ОС-функции c), маловероятно, что вы на самом деле измените ее на что-то, что на самом деле соответствует имени файла, используемого другой программой. Гораздо более вероятно либо ввести байт мусора в имя файла, либо сразу же его обрезать; если ваша программа уже не выполняет что-то вроде «перечисления всех файлов в моем домашнем каталоге и открытия каждого из них».
Кстати, код, который вы даете для установки «случайного» бита памяти для чего-либо » Случайный », вероятно, будет далеко не« случайным »во многих случаях. Например, это может быть одно и то же значение при каждом запуске программы. Некоторые лучшие (хотя C, а не C ++) альтернативы ...
// #1
char *p = rand();
*p = rand();
// #2
FILE * randomDevice = fopen("/dev/urandom", "r");
char *p;
fread(&p, sizeof(char *), 1, randomDevice);
fread( p, sizeof(char), 1, randomDevice);