Программирование

Статья Системные таймеры, Часть[3] – HPET и таблица ACPI

  • 19 965
  • 0
Предыдущие части:

3. ACPI таблицы – таймер HPET.
---------------------------------------

HPET – High Precision Event Timers
частота: 14.318180 MHz | счётчик...

Статья Системные таймеры, Часть[2] – ACPI

  • 6 768
  • 3
Содержание:

1.
Общие сведения. Legacy-таймеры PIT и RTC.
2. Шина PCI – таймер менеджера питания ACPI.
3.
Усовершенствованный таймер HPET.
4. Счётчики процессора LAPIC и TSC (time-stamp-counter).
5. Win - профилирование кода.
---------------------------------------

В первой части рассматривались общие сведения и унаследованные девайсы..
В этой части познакомимся с шиной PCI и более совершенными таймерами наших дней..


[COLOR=rgb(250...

Статья Системные таймеры. Часть[1] – PIT и RTC

  • 10 866
  • 0
В статье рассматриваются технические детали системных таймеров и способы их программирования. Роль таймеров в системе глобальна – по их прерываниям логика чипсета контролирует длительность шинных циклов (что влияет на общую производительность), переводит процессор и ACPI-девайсы в энергосберегающий режим, организует ход часов, пробуждает разнообразные события Event и многое другое.

Более того, взяв за основу их тики, можно измерить время выполнения программных блоков, чтобы максимально оптимизировать свой код. Этот процесс назвали "профилированием", а сам контролирующий модуль - профайлером. Здесь имеются внешние факторы, которые искажают результаты тестирований – обсуждению этой проблемы и посвящена данная статья.

На первый взгляд, в век интеллектуальных процессоров оптимизация кажется не уместной. Однако не стоит переоценивать аппаратные возможности – по мере роста...

Статья Кража открытых файлов Win

  • 16 468
  • 5
Одним из основных понятий в биологических дисциплинах является захват ареала обитания (области распространения таксонов). На подсознательном уровне все живые организмы пытаются занять свою нишу в общей сфере, любыми путями оберегая доступы к ней из вне. Аналогичной политики придерживаются и операционные системы, всё больше наделяемые интеллектом их разработчиками. Так, например, запущенный на исполнение процесс блокирует доступ ко-всем своим файлам и на запрос их копирования, система дипломатично посылает нас на материк:

Здесь и далее, в качестве кролика я выбрал системный файл SAM (Security Account Manager) – некий сейф с базой-данных учётных записей Win. Он хранит хэши паролей и приватную информацию о всех пользователях системы, а сами данные оформлены в виде древа структур настроек безопасности. На физическом уровне, база живёт в одноимённой ветке реестра HKLM\SAM, доступ к которой закрыт для всех, включая...

Статья ZIP'аем файл вручную (часть 2. распаковщик)

  • 4 852
  • 0
В продолжение темы об упаковщиках..
В первой части речь шла о том, как можно создать файл с геном репродукции, который по требованию порождал-бы бесчисленное количество своих воинов. Эта армия может решать определённый круг задач, а само требование может быть каким угодно, например привязка по времени, или какому-нибудь системному событию. Более того, способ позволяет создавать т.н. "файлы-матрёшки", размножение которых отследить будет довольно сложно.

Суть в том, что в экзе-файлах имеются нулевые "байты выравнивания секций" – в спецификации на РЕ-файл их называют File-Alignment. Они дополняют хвост полезного кода и данных до кратного значения (обычно 200h, 512-байт). При транспортировке файла эти нули представляют собой бесполезный балласт, и чтобы при инжекте эмбриона в матку мы не получили "слона в посудной лавке", было решено избавиться от них, а при...

Статья ZIP'аем файл вручную (часть.1. упаковщик)

  • 7 966
  • 4
ZIP.png

Допустим имеем файл и нужно перенести его в своей программе на чужую машину. Если этот файл будет внешним (на подобии библиотеки или драйвера), то сразу бросится в глаза. А что если зашить его в своё тело и создавать при запуске основного приложения? Благо производительность современных процессоров это позволяет и жертва даже не успеет понять в чём дело. Другими словами получим матку, которая будет порождать файлы.

Всё-бы хорошо, только таскать в себе готовые бинарники типа exe\dll в несжатом виде тоже не лучшая идея – одних только "байтов выравнивания" в них под 50%, а для использования готовых архиваторов нужен к нему распаковщик. Так-что иметь в запазухе обычный зиппер это всегда гуд, а данная статья (надеюсь) поможет вам разобраться в его деталях. Буду использовать ассемблер FASM, двоичный редактор HxD, ну и виндовый кальк в инженерном виде.
----------------------------------------

[COLOR=rgb(243, 121...

Статья SetupAPI – информация об устройствах

  • 12 242
  • 1
Перед любым системным программистом, рано или поздно встаёт задача определения текущего оборудования системы. Причин для этого может быть много, например: установить драйвер на девайс, собрать лог всех устройств для последующей работы с ними и т.п. Если мы не будем готовы к таким поворотам судьбы, то придётся переобуваться в воздухе (на скорую руку штудируя доки), в результате чего на выходе получим как-минимум кривой софт.

Да.., в штатной поставке Windows имеется оснастка WMI Control – Windows Management Instrumentation (инструментарий управления Win), которая прекрасно решает проблемы данного характера. Однако вызывать сторонние сервисы и приложения из своих программ слишком накладно по времени, и наше приложение будет жутко тормозить. Личные опыты показали, что одну и ту-же задачу WMI решает аж в 60 раз медленнее, чем если этот-же функционал реализовать прямым вызовом системных функций WinAPI – аргумент явно не в пользу WMI, хотя данная оснастка и требует...

Статья Стек – общая философия

  • 9 302
  • 9
Стек – неотъемлемая часть любого, работающего под управлением процессора х86, приложения. Он организован на аппаратном уровне и магнитом притягивает к себе как системных программистов, так и различного рода малварь. Переполнение стека – наиболее часто встречающейся программный баг, который влечёт за собой катастрофические для приложения последствия. Стек активно используют все WinAPI, так-что вызов любой системной функции при исчерпавшем себя стеке, порождает необрабатываемое исключение STACK_OVERFLOW с кодом 0xC00000FD.

Для адресации и работы с сегментом стека, в процессоры х86 была включена специальная регистровая пара SS:ESP (StackSegment –> StackPointer). Microsoft неохотно делится с тонкостями реализации, поскольку сама "слизала" его ещё с допотопной машины DEC-PDP и в своей документации нигде это даже не обозначила. Но оставим сей факт на их совести, ведь в чём-то мелкомягкие и правы – зачем изобретать велосипед...

Статья DLL библиотеки – инструкция к метле

  • 8 935
  • 4
Ещё во-времена старушки дос стало очевидно, что некоторые программные модули лучше хранить не внутри исполняемого файла, а вынести их наружу и подгружать по мере необходимости. В то время такие "прицепы" называли оверлеями и с точки зрения экономии 1М-байтного адресного пространства это было разумно – одну большую программу кромсали на мелкие части, и эти части отрабатывали в памяти по очереди. Подобная техника докатилась и до наших дней, только теперь это динамически подгружаемые DLL.

По сути, нет смысла копать данную тему в очередной раз – всё давно расписано, поэтому добавим экшена и сделаем ставку на нестандартное их применение. Как показывает практика, фишка с защитой программ на основе статически прилинкованных DLL пользуется спросом среди коммерческого софта, значит пора сорвать с неё вуаль и познакомиться по-ближе.
---------------------------------------

Записки дилетанта

[COLOR=rgb(26, 188...

Статья Самотрассировка, или марш-бросок по периметру отладчика

  • 4 864
  • 5
Как и всё, что работает под управлением центрального процессора, операционная система – это тоже программа, которая на этапе тестирования требовала отладки. Поскольку системное пространство памяти в Win логически разделено на два региона, инженерам требовались технические люки из юзера в кернел. После того-как всё было (типа) настроено, окончательно избавляться от этих туннелей было уже поздно – пришлось-бы опять переписывать львиную долю кода, что совсем не вдохновляло разработчиков. Поэтому лазейки просто прикрыли фиговым листом в надежде "авось прокатит"..

Это касается таких механизмов как TRAP-бит в регистре флагов Eflags, привелегия Debug в пользовательском режиме, регистры отладки DR0-DR7 и несколько модельно-специфичных регистров MSR. В результате не только админ, но и обычный юзер получил в награду аппаратные рычаги дебага, не воспользоваться которыми было-бы грех – нужно просто отключив шаблонное мышление обратить взор чуть дальше...