Имеется кусок кода:
#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 выдает интересную ошибку:
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-спецификация у автоматически сгенерированного виртуального деструктора» полностью…
Недавно мне пришлось заняться изучением интерфейса библиотеки libresolv, отвечающей за формирование DNS-запросов и получение и разбор ответов (хотя разбор — это громко сказано). Так получилось, что нормальной внятной документации по API-функциям с примерами использования я найти не смог (может, я не там искал). И хотя код — лучшая документация
, окончательно разобраться с форматом возвращаемых данных я смог только после изучения RFC, посвященных DNS. Читать статью «Наш ответ libresolv» полностью…
В поисках простых чисел Софи Жермен написал программу, которая ищет простые числа (я их собирался использовать для реализации решета). От нечего делать я пошёл дальше и решил найти все простые числа до миллиона. А также проверить утверждение, что сумма всех простых чисел до миллиона есть простое число. Читать статью «Простые числа от 2 до 1,000,000» полностью…
Криптографический протокол Диффи–Хеллмана (Diffie-Hellman Key Exchange) — алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя частично защищенный канал связи. Под частично защищенным понимается канал, данные в котором защищены от модификации, но не от прослушивания (как утверждает Wikipedia, такие условия имеют место довольно часто
).
В данной статье я приведу реализацию криптографического протокола Диффи-Хеллмана на языке С с использованием библиотеки GMP. Читать статью «Реализация криптографического протокола Диффи-Хеллмана обмена ключами с использованием GMP» полностью…
Не секрет, что список сервисных процессов (служб), отображаемый Windows (например, при помощи консоли services.msc), является далеко не полным. Когда-то давно меня заинтересовало, как же можно посмотреть, какие службы/драйвера/системные процессы живут в системе. Читать статью «Кто живёт у нас в системе, или, как просмотреть полный список сервисных процессов в Windows» полностью…
Позавчера возникла проблема: нужно было срочно переставить Windows XP (ибо VMWare так больно упала, что Windows пал смертью храбрых). Всё хорошо, но вот родного инсталляционного диска под рукой не было, а инсталлятор жил на NTFS-разделе (кстати, DOS-драйвер для чтения NTFS почему-то оказался бессильным). По счастью, на FAT32-диске нашелся образ загрузочного диска. Одна проблема: образ был сохранен Nero и записан в формате NRG. И, как на зло, не было ничего, что понимает NRG-образы. А так как Internet тоже не было (какой там Internet при загрузке с Реаниматора!), пришлось думать, как можно с ограниченными средствами преобразовать NRG-образ в ISO. Читать статью «Преобразование образов NRG в ISO» полностью…
Почему-то каждый третий мнит себя экспертом по безопасности, пишет "безопасные" программы для шифрования данных, но даже не подозревает, что существуют и другие режимы шифрования, кроме известного как ECB. И этим грешат не только студенты в своих дипломных работах (головы бы поотрывал их научрукам за такое), но и "серьёзные" разработчики.
Например, программист на сайте uk-swingers.com шифровал номера кредитных карточек (!), используя простой алгоритм RC4 и постоянный ключ. Ломалось очень просто. К счастью, уже исправлено
Другие товарищи использовали сложение по модулю два для шифрования важных данных. Третий товарищ защитил диплом по безопасности, и шифрование секретной базы данных опять-таки выполнялось по модулю два. Четвертый шифровал AES'ом тонны информации (в режиме ECB, разумеется), при этом не потрудившись даже ее сжать. Этот печальный список можно продолжать и продолжать…
Я решил провести наглядный эксперимент, чтобы выяснить, насколько эффективны различные алгоритмы шифрования в различных режимах работы. Читать статью «Режимы шифрования данных, или, когда сильный шифр не спасает» полностью…