хочу сюди!
 

Элла

44 роки, стрілець, познайомиться з хлопцем у віці 40-54 років

Замітки з міткою «linux»

gcore - Сделать core dump работающего процесса

gcore -o /tmp/test.core 6498
Дальше gdb procname  /tmp/test.core и любуемся на текущее состояние процесса ж)

Касперский разрабатывает свою ОС

Как сообщает сайт steamserver.at.ua Евгений Касперский в своем блоге заявил, что известная своими антивирусными решениями компания «Лаборатория Касперского» пишет собственную операционную систему. Сроки выхода и рабочее название пока не сообщаются, но известно, что операционка пишется с расчетом не на рядового пользователя, а на крупные промышленные системы.

Касперский отмечает, что разработка подобного ПО в корне отличается от создания ОС для домашнего и офисного использования. Основное отличие состоит в том, что в случае атаки пораженный модуль нельзя отключать от всей системы — напротив, он должен продолжить выполнение своих функций (представьте себе отключение жизненно важного модуля на атомной станции). То есть промышленная операционная система должна быть спроектирована таким образом, чтобы полностью исключить возможность исполнения в ней стороннего кода.

Касперский напомнил про несколько случаев, когда имеющиеся системы оказались беззащитными перед атаками (например, вирус, который поразил компьютеры АЭС Ирана), и предсказал, что в дальнейшем ситуация только ухудшится. К чему может привести масштабная атака на промышленные объекты, мы уже могли видеть в фильме «Крепкий орешек 4».

Атомарные операции Vs Mutex

Сейчас наступило время многоядерных и многопроцессорных систем (даже в последних смартфонах уже 2+ ядер)

Основная проблема многопроцессорного программирование это проблемы одновременного доступа к данным...

Доступ к данным можно блокировать методом mutex-a (spin lock)
pthread_mutex_lock(&mutex);
// некая работа над глобальными данными
pthread_mutex_unlock(&mutex);

А можно при помощи атомарных операций
__sync_add_and_fetch( &global_int, 1 );

Сегодня пришло в голову проверить при каком количестве операций внутри блокируемого блока выгоднее использовать Mutex - а при каком такой-же набор __sync_ операций (т.е. косвенно протестировать сколько стоит pthread_mutex_lock VS __sync)


Фактически тест код mutex
for (i = 0; i < INC_TO; i++)
{
pthread_mutex_lock(&mutex);
for (int j = 0; j < MAX_OPS; j++)
global_int++;
pthread_mutex_unlock(&mutex);
}
И для атомик:

for (i = 0; i < INC_TO; i++)
{

for (int j = 0; j < MAX_OPS; j++)
__sync_add_and_fetch( &global_int, 1 );
}

Результаты тестов:  
при MAX_OPS < 10 -  лучше __sync_add_and_fetch, 
при MAX_OPS >= 10 -  лучше  pthread_mutex_lock  && pthread_mutex_unlock, 

Вывод:  если вам нужно обновить одновременно меньше 10-ти переменных  - при возможности  лучше использовать атомарные операции, иначе - блок pthread_mutex_lock  && pthread_mutex_unlock

Новий Kali Linux!!!

http://andrey.lviv.ua/blog/kali-linux-2-0 http://andrey.lviv.ua/blog/repair-grub-kali-linux-with-windows-10
Розробники знаменитого дистрибутива для пентестингу зробили найзначніший реліз з 2013 року. Офіційно оголошено про вихід Kali Linux 2.0. Дистрибутив заснований на ядрі Linux 4.0, значно збільшено кількість драйверів для апаратної підтримки і Wi-Fi, реалізована підтримка різних середовищ робочого столу (KDE, GNOME3, Xfce, MATE, e17, lxde і i3wm), оновився список утиліт в комплекті. Але найголовніше - Kali Linux тепер поширюється в режимі безперервного оновлення (rolling distribution).

Криптографія в FreeBSD


FreeBSD є однією з моїх улюблених Linux-систем. Вона звісно не була першою в списку ОС сімейства Linux які я використовував, однак стала тою системою, робота з якою у мене є найтривалішою. Це і настільна версія FreeBSD, а також звичайна серверна версія (стоїть у мого хостинг-провайдера) з якою мені часто доводиться мати справу. Люблю я цього червоного демона :) Отож васшій увазі представляється переклад статті про криптографію у чудовій FreeBSD.

Безкоштовне програмне забезпечення

Наразі набирається команда для створення нового дистрибутиву Linux (UA). Усіх бажаючих та зацікавлених у співпраці - прохання звернутись!

Безкоштовне програмне забезпечення

Наразі набирається команда для створення нового дистрибутиву Linux (UA). Усіх бажаючих та зацікавлених у співпраці - прохання звернутись!

Неожиданное поведение функции select

В Linux
man 2 select

НАЗВАНИЕ
       select,   pselect,  FD_CLR,  FD_ISSET,  FD_SET,  FD_ZERO  -  синхронное
       мультиплексирование ввода-вывода

Во FreeBSD - есть еще такая пометка:  "The default size of FD_SETSIZE is currently 1024. In order to accommodate programs which might potentially use a larger number of open files with select(), it is possible to increase this size by having the program define FD_SETSIZE before the inclusion of any header which includes <sys/types.h>." (Что в переводе означает что лимит FD_SET 1024 и чтобы его увеличить нужно переопределить дефайн...

Сейчас select редко где встретишь в проекте, а вот раньше она встречалась сплошь и рядом.
Одна из самых общераспространенных схем использования select:

struct timeval null_time;
null_time.tv_sec = 2;
null_time.tv_usec = 0;        
fd_set inSet;        
FD_ZERO(&inSet); 
FD_SET(descr, &inSet);  
int res = select(descr+1, &inSet, NULL, NULL, &null_time);

Данный фрагмент кода ожидает когда из сокета можно будет читать данные с таймаутом 2 секунды

И все у нас будет замечательно, пока в один прекрасный момент в нашей программе по какой-то причине не появится 1024+ открытых файлов и значение descr станет больше 1024. И в этот чудесный день функция, как ожидается не вернет -1 (ошибочное значение), а замечательно потрет память за переменной fd_set inSet, что приведет к очень сложно отлаживаемым багам.

Вот пример кода который демонстрирует затирание:
#include <sys/time.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>


int main()
{
        int descr;
        for (int i = 0; i < 1024; i++)
        {
                descr = open("/dev/null", O_RDONLY);
                if (descr < 0)
                {
                        printf("Can't create descr\n");
                        return -1;
                }
        }
        struct timeval null_time;
        null_time.tv_sec  = 2;
null_time.tv_usec = 0;

        fd_set  inSet;
        char pad[] = "1234567890abcdefg";
        printf("pad before select [%s]\n", pad);
        FD_ZERO(&inSet);
        FD_SET(descr, &inSet);
        int res = select(descr+1, &inSet, NULL, NULL, &null_time);
        printf("Pad after select [%s], res=%d\n", pad, res);
}

$ g++ testselect.cpp
$ ./a.out
Pad bafore select [1234567890abcdefg]
Pad after [], res=1

Для избежания затирания я рекомендую использовать poll, для большого числа соединений - epoll. Или в крайнем случае сделать проверку значения descr перед выполнением select


Распаковка RPM-а

rpm2cpio filename | cpio -i --make-directories
Сторінки:
1
2
3
попередня
наступна