Ars Longa, Vita Brevis

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

[-]
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, то ошибка исчезнет.

В чем же дело? Читать статью «GCC и throw-спецификация у автоматически сгенерированного виртуального деструктора» полностью…

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

Итак, сегодня выдалось очень подходящее настроение для копания в чужом C++ коде. Вот что из этого получилось. Читать статью «Криптография, C++ и безопасное освобождение памяти» полностью…

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