• Патчим процессы в Linux на лету при помощи GDB

      Техники перехвата функций в Linux хорошо известны и описаны в интернете. Наиболее простой метод заключается в написании динамической библиотеки с «функциями-клонами» и использовании механизма LD_PRELOAD для переопределения таблицы импорта на этапе загрузки процесса.

      Недостаток LD_PRELOAD в том что необходимо контролировать запуск процесса. Для перехвата функций в уже работающем процессе или функций отсутствующих в таблице импорта можно использовать «сплайсинг» — запись команды перехода на перехватчик в начало перехватываемой функции.

      Также известно, что в Python имеется модуль ctypes позволяющий взаимодействовать с данными и функциями языка Си (т.е. большим числом динамических библиотек имеющих Си интерфейс). Таким образом ничто не мешает перехватить функцию процесса и направить её в Python метод обёрнутый в С-callback с помощью ctypes.
      Читать дальше →
      • +34
      • 12,3k
      • 6
    • Экспорт истории сообщений из Skype

        Многие пользователи Skype в Linux замечали насколько неудобно там сделана работа с историей сообщений чата. Нет нормального поиска, сообщения за длительный период времени грузятся очень долго. Нет возможности экспорта в другие форматы/клиенты.

        Skype для Linux хранит историю сообщений в недокументированном бинарном формате. Несмотря на то что энтузиасты расковыряли его довольно давно, еще многое остается неизвестным.

        Поверхностный поиск готового решения для экспорта истории сообщений не привел к успеху. Поэтому я, собрав всю доступную информацию, написал своё.
        Читать дальше →
      • 6 способов слияния списка списков

          Зашел тут у нас в офисе разговор как наиболее «красиво» и быстро склеить список списков в Питоне. Действительно как?

          Даже такую казалось бы тривиальную задачу можно решить несколькими способами, существенно отличающимися по скорости и выразительности.

          ВАРИАНТ1
          Все знают, что элементы списка можно перебирать в цикле и, то что можно добавлять элементы в конец. Это приводит нас к первому варианту решения:
          def listmerge1(lstlst):
              all=[]
              for lst in lstlst:
                  for el in lst:
                      all.append(el)
              return all

          Мало того, что функция растянулось аж на 6 строк, так вдобавок она еще и не эффективная.
          Попробуем её улучшить в обоих смыслах: скорости и красоты («pythonic way»).
          Читать дальше →
        • Миниотчет об участии в ICFPC 2009

            ICFPC это ежегодный конкурс программистов. Здесь мой отчет об участии.

            Задание описано сто раз, можно посмотреть здесь habrahabr.ru/blogs/icfpc/63279

            В двух словах:
            Вокруг земли крутится несколько спутников, мы управляем одним из них. Надо выполнить задания, написав серию включений двигателей. Задания проверялись на виртуальной машине-симуляторе, программы для которой предоставили организаторы.

            Т.к. я не знал заранее будет ли у меня время участвовать, я оказался без команды, это серьёзно повлияло на процесс принятия решений. Было ясно, что одному выиграть очень сложно, поэтому я решил не гнаться за очками, а делать «красивое» решение даже если и будет понятно, что не успеваю. Так же по ходу дела я периодически отвлекался на интересные, но не сильно важные для получения очков вещи, о которых и напишу.
            Читать дальше →
          • Скоро ICFPC 2009

              В эту пятницу 26 июня стартует ежегодный конкурс программирования, International Conference on Functional Programming Contest (сокращенно ICFPC). Конкурс знаменит оригинальными заданиями, варьирующимися от «очень интересных», до «срыв башни». Не смотря на слово «функциональный» в названии, никаких ограничений на используемый язык программирования нет (абсолютно! это традиция конкурса).

              В прошлом году участвовало 330 команд со всего мира. В этом году снова приглашаются все желающие.
              Конкурс длится три дня (72 часа). Участвовать можно, как самому, так и командой. Есть так называемый «скоростной тур» — ответ в первые 24 часа соревнования.

              Задание будет выложено в Пятницу 26 июня в 22:00:16 MSD (время Московское летнее, GMT+4) на страницу конкурса icfpcontest.org (счетчик до начала icfpcontest.org/countdown.php)

              Небольшой обзор заданий за прошлые годы. Многие из них стоят того, чтобы скачать условие и покопаться самому (поверьте мне это непередаваемое удовольствие).
              Читать дальше →
            • Случайные числа из звуковой карты

                Многие когда-либо интересовались случайными числами. Хочу поделиться моими экспериментами по получению истинно случайных чисел с помощью «аппаратного генератора» встроенного в практически любой компьютер — звуковой карты.

                При подготовке материала, я переписал свой старый Си код на Питоне, поэтому данный опус также является примером по использованию Windows DLL из Питона с использованием стандартной библиотеки ctypes.

                В конце статьи сравниваются данные полученные от двух звуковых карт Realtek и Audigy 2, приведены результаты статистических тестов на случайность.

                UPD Исправил пропавшие в коде нули, которые съело НЛО.
                Читать дальше →