Категория: Разработка ПО

Определяем является ли число степенью двойки

Просто кусок кода, который определяет является ли число степенью двойки.


if ((blocksize & (blocksize - 1)) != 0) {
fprintf(stderr,
"%s: blocksize %lu not a power-of-two value\n",
progname, blocksize);
return EINVAL;
}

 

Как разрешить регистры MSR в Virtual Box

MSR ( model specific register ) — регистры процессора специфичные для данного типа процессора.

Virtual Box — программное обеспечение для виртуализации.

Virtual Box 4.0.4 и более ранние версии игнорируют большинство регистров MSR. Хотя мог бы разрешать доступ к регистрам хостовой системы. Однако, процессоров много и каждый имеет свой собственный набор регистров MSR и потому проще запретить все, что не относится к стандартному набору, так безопаснее.

Иногда  хочется запустить в виртуальной машине и отладить что-нибудь, что работает с MSR. При этом, например, известно какие регистры нужно использовать и насколько безопасно их использовать из виртуальной машины. Если бы нужно было бы использовать VMWare, то с мыслю этой пришлось бы попрощаться( если конечно не мил подход реверсить-патчить-реверсить-патчить). Но, к счастью, Virtual Box предоставляется с исходниками. Правда только Virtual Box OSE. Не беда, будем использовать его. А именно две версии: 3.2.8 ( стандартный для Ununtu 10.10 ) и 4.0.4 ( последняя версия на момент написание текста ).

Продолжение чтения »

Создание потока из метода класса

Уже несколько раз приходилось сталкиваться с проблемой невозможности запустить поток из функции, которая является методом класса. Компилятор упрямо возвращает ошибку подобную, приведенной ниже:

error C2664: ‘CreateThread’ : cannot convert parameter 3 from ‘unsigned long (__thiscall CMyClass::*)(void *)’ to ‘unsigned long (__stdcall *)(void *)’

И его понять можно.  Функции требуется адрес статической функции. А, запуская поток с метода класса, в большинстве случаев есть желание, чтобы функция работала как полноценный метод экземпляра класса. Решить проблему помогает «финт ушами» описаный здесь. Некоторые советуют использовать для этого boost. Не считаю, что такая мелочь повод для подключения дополнительной библиотеки.

Какой-то умник добавил исходники решения проблемы на говнокод.ру.  Он определенно просто не в теме.

Fuzzing, фаззинг, in-memory fuzzing, фаззинг в памяти, vulnerability, уязвимсоти, binary code, бинарный код, static analysis, статический анализ, dynamic analysis, динамический анализ, fault injection, внедрение ошибок, CTF, information security, информационная безопасность, unit testing, тестирование