Для того, чтобы процесс стал демоном, программисты используют вызов fork(), например, следующим образом:

[-]
View Code C
chdir("/");
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

pid_t pid = fork();
switch (pid) {
    case 0:
        // Child code — hello from the daemon
        break;

    case -1:
        perror("fork");
        exit(EXIT_FAILURE);

    default:
        exit(EXIT_SUCCESS);
}

Код рабочий, но с точки зрения безопасности не самый лучший. Далее

8
Март
2009

va_list и Segmentation Fault

Vladimir
Опубликовано в: C/C++

Недавно пришлось вспомнить молодость и программирование на C. В результате столкнулся с одной очень неочевидной ошибкой.

Те, кто программируют под Linux/UNIX, вероятно, знают о функции vsyslog. Её приятной особенностью является то, что вместо переменного количества аргументов она берет фиксированное количество, последним из которых является аргумент типа va_list. Недостаток функции — она не входит в стандарты POSIX (то есть в коде её можно использовать на свой страх и риск — и не забыть добавить проверку на её существование в autoconf). Далее

3
Март
2009

Имеется кусок кода:

[-]
View Code C++
#include <string>

class Base {
public:
    Base(void) {}
    virtual ~Base(void) throw() {}
};

class Derived : public Base {
public:
    ::std::string s;
};

int main(int, char**)
{
    return 0;
}

При компиляции в GCC выдает интересную ошибку:

[-]
View Code Bash
g++ test.cpp
test.cpp:9: error: looser throw specifier for ‘virtual Derived::~Derived()
test.cpp:6: error:   overriding ‘virtual Base::~Base() throw ()

Самое интересное, что если сделать Derived::s типа, например, int, то ошибка исчезнет.

В чем же дело? Далее

22
Май
2008

Разбираясь с деталями реализации распределителей памяти (allocator) в C++, я решил вспомнить своё криптографическое прошлое :-) Не в том плане, что я эксперт в криптографии, а в том, что приходилось читать соответствующую литературу (до сих порэтот гигабайт на винте валяется), разбираться с ней, анализировать алгоритмы, оценивать их с точки зрения безопасности и в том же духе. Но это не важно. Разбираясь с деталями реализации, я вспомнил интересную статью Питера Гутмана, "Secure Deletion of Data from Magnetic and Solid-State Memory". Еще в то время, когда я этим всем активно занимался и читал, мне в голову прочно врезалась фраза, смысл которой сводился к тому, что очень немногие криптографические библиотеки действительно заботятся о конфиденциальности чувствительной информации (например, ключи шифрования). Ведь информацию можно "вытащить" и из памяти выключенного компьютера; или с жесткого диска, даже если информация была переписана. Всех, кому интересна практическая реализация восстановления информации, отсылаю к статье Питера Гутмана (ссылка приведена выше).

Итак, сегодня выдалось очень подходящее настроение для копания в чужом C++ коде. Вот что из этого получилось. Далее

21
Май
2008

Не секрет, что список сервисных процессов (служб), отображаемый Windows (например, при помощи консоли services.msc), является далеко не полным. Когда-то давно меня заинтересовало, как же можно посмотреть, какие службы/драйвера/системные процессы живут в системе. Далее

5
Апр
2008