Windows 10 system programming part 2 pdf

Привет, Хаброжители! Ядро Windows таит в себе большую силу. Но как заставить ее работать? Павел Йосифович поможет вам справиться с этой сложной задачей:

Содержание

  1. Книга «Работа с ядром Windows»
  2. Глава 8
  3. Уведомления потоков и процессов
  4. Уведомления процессов
  5. Реализация уведомлений процессов
  6. Функция DriverEntry
  7. Обработка уведомлений о выходе из процессов
  8. Обработка уведомлений о создании процессов
  9. Передача данных в пользовательский режим
  10. Клиент пользовательского режима
  11. Уведомления потоков
  12. Уведомления о загрузке образов
  13. Упражнения
  14. Итоги
  15. Windows 10 System Programming, Part 1

Книга «Работа с ядром Windows»

f4zp66u0jd7j cf9 d2ns2b5lbs Привет, Хаброжители! Ядро Windows таит в себе большую силу. Но как заставить ее работать? Павел Йосифович поможет вам справиться с этой сложной задачей: пояснения и примеры кода превратят концепции и сложные сценарии в пошаговые инструкции, доступные даже начинающим.

В книге рассказывается о создании драйверов Windows. Однако речь идет не о работе с конкретным «железом», а о работе на уровне операционной системы (процессы, потоки, модули, реестр и многое другое).

Вы начнете с базовой информации о ядре и среде разработки драйверов, затем перейдете к API, узнаете, как создавать драйвера и клиентские приложения, освоите отладку, обработку запросов, прерываний и управление уведомлениями.

Глава 8

Уведомления потоков и процессов

Один из мощных механизмов, доступных для драйверов режима ядра — возможность уведомления о некоторых важных событиях. В этой главе будут рассмотрены некоторые из этих событий, а именно создание и уничтожение процессов, создание и уничтожение потоков и загрузка образов.

Уведомления процессов

Каждый раз, когда в системе создается или уничтожается процесс, ядро может уведомить об этом факте заинтересованные драйверы. Это позволяет драйверам отслеживать состояние процессов (возможно, связывая с процессами некоторые данные). Как минимум это позволяет драйверам отслеживать создание/уничтожение процессов в реальном времени. Под «реальным временем» я имею в виду, что уведомления отправляются в оперативном режиме как часть создания процесса; драйвер не пропустит никакие процессы при создании и уничтожении.

При создании процесса драйвер также получает возможность остановить создание процесса и вернуть ошибку стороне, инициировавшей создание процесса. Эта возможность доступна только в режиме ядра.

Windows предоставляет другие механизмы уведомления о создании или уничтожении процессов. Например, с механизмом ETW (Event Tracing for Windows) такие уведомления могут приниматься процессами пользовательского режима (работающими с повышенными привилегиями). Впрочем, предотвратить создание процесса при этом не удастся. Более того, у ETW существует внутренняя задержка уведомлений около 1–3 секунд (по причинам, связанным с быстродействием), так что процесс с коротким жизненным циклом может завершиться до получения уведомления. Если в этот момент будет сделана попытка открыть дескриптор для созданного процесса, произойдет ошибка.

Основная функция API для регистрации уведомлений процессов PsCreateSetProcessNotifyRoutineEx определяется так:

В настоящее время существует общесистемное ограничение на 64 регистрации, поэтому теоретически попытка регистрации может завершиться неудачей.

В первом аргументе передается функция обратного вызова драйвера, прототип которой выглядит так:

Второй аргумент PsCreateSetProcessNotifyRoutineEx указывает, что делает драйвер — регистрирует обратный вызов или отменяет его регистрацию (FALSE — первое). Обычно драйвер вызывает эту функцию с аргументом FALSE в своей функции DriverEntry, а потом вызывает ту же функцию с аргументом TRUE в своей функции выгрузки.

Аргументы функции уведомления:

В Windows 10 версии 1607 появилась другая функция для уведомлений процессов: PsCreateSetProcessNotifyRoutineEx2. Эта «расширенная» функция создает обратный вызов, сходный с предыдущим, но обратный вызов также активизируется для процессов Pico. Процессы Pico используются хост-процессами Linux для WSL (Windows Subsystem for Linux). Если драйвер заинтересован в таких процессах, он должен регистрироваться с расширенной функцией.

У драйвера, использующего эти обратные вызовы, должен быть установлен флаг IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY в заголовке PE (Portable Executable). Без установки флага вызов функции регистрации возвращает STATUS_ACCESS_DENIED (значение не имеет отношения к режиму тестовой подписи драйверов). В настоящее время Visual Studio не предоставляет пользовательского интерфейса для установки этого флага. Он должен задаваться в параметрах командной строки компоновщика ключом /integritycheck. На рис. 8.1 показаны свойства проекта при указании этого ключа.

image loader

Структура данных, предоставляемая для создания процесса, определяется следующим образом:

Описание важнейших полей этой структуры:

В обратных вызовах уведомления процессов следует применять защитное программирование. В частности, перед фактическим обращением необходимо проверять, что каждый указатель, по которому вы собираетесь обратиться, отличен от NULL.

Реализация уведомлений процессов

Чтобы продемонстрировать, как работают уведомления процессов, мы построим драйвер, который будет собирать информацию о создании и уничтожении процессов и предоставлять эту информацию для потребления клиентом пользовательского режима. Как и программа Process Monitor из пакета Sysinternals, он использует уведомления процессов (и потоков) для передачи информации об активности процессов (и потоков). В процессе реализации этого драйвера будут использованы некоторые средства, описанные в предыдущих главах.

Наш драйвер будет называться SysMon (хотя он никак не связан с программой SysMon из пакета Sysinternals). Он будет хранить всю информацию о создании/уничтожении в связном списке (с использованием структур LIST_ENTRY). Так как к связному списку могут одновременно обращаться несколько потоков, необходимо защитить его мьютексом или быстрым мьютексом; мы воспользуемся быстрым мьютексом, так как он более эффективен.

Собранные данные должны быть переданы в пользовательский режим, поэтому мы должны объявить стандартные структуры, которые будут строиться драйвером и получаться клиентом пользовательского режима. Мы добавим в проект драйвера стандартный заголовочный файл с именем SysMonCommon.h и определим несколько структур. Начнем со стандартного заголовка для всех информационных структур, который определяется следующим образом:

Приведенное выше определение перечисления ItemType использует новую возможность C++ 11 — перечисления с областью видимости (scoped enums). В таких перечислениях значения имеют область видимости (ItemType в данном случае). Также размер этих перечислений может быть отличен от int — short в данном случае. Если вы работаете на C, используйте классические перечисления или даже #define.

Структура ItemHeader содержит информацию, общую для всех типов событий: тип события, время события (выраженное в виде 64-разрядного целого числа) и размер полезных данных. Размер важен, так как каждое событие имеет собственную информацию. Если позднее вы захотите упаковать массив таких событий и (допустим) предоставить его клиенту пользовательского режима, клиент должен знать, где заканчивается каждое событие и начинается новое.

При наличии такого общего заголовка можно создать другие структуры данных для конкретных событий. Начнем с простейшего — выхода из процесса:

Для события выхода из процесса существует только один интересный фрагмент информации (кроме заголовка) — идентификатор завершаемого процесса.

Если вы работаете на C, наследование вам недоступно. Впрочем, его можно имитировать — создайте первое поле типа ItemHeader, а затем добавьте конкретные поля; структура памяти остается одинаковой.

Для идентификатора процесса используется тип ULONG. Использовать тип HANDLE не рекомендуется, так как в пользовательском режиме он может создать проблемы. Кроме того, тип DWORD не используется, хотя в заголовках пользовательского режима тип DWORD (32-разрядное целое без знака) встречается часто. В заголовках WDK тип DWORD не определен. И хотя определить его явно нетрудно, лучше использовать тип ULONG — он означает то же самое, но определяется в заголовках как пользовательского режима, так и режима ядра.

Так как каждая структура должна храниться как часть связанного списка, каждая структура данных должна содержать экземпляр LIST_ENTRY со ссылками на следующий и предыдущий элементы. Так как объекты LIST_ENTRY не должны быть доступны из пользовательского режима, мы определим расширенные структуры, содержащие эти элементы, в отдельном файле, который не будет использоваться в пользовательском режиме.

В новом файле с именем SysMon.h определяется параметризованная структура, в которой хранится поле LIST_ENTRY с основной структурой данных:

Параметризованный класс используется для того, чтобы вам не приходилось создавать множество типов, по одному для каждого конкретного типа события. Например, для события выхода из процесса может быть создана следующая структура:

Также возможно наследовать от LIST_ENTRY, а затем добавить структуру ProcessExitInfo. Но такое решение менее элегантно, так как наши данные не имеют никакого отношения к LIST_ENTRY, поэтому расширение — искусственный прием, которого следует избегать.

Тип FullItem избавляет от хлопот с созданием этих отдельных типов.

Если вы используете C, то, естественно, решение с шаблонами будет недоступно, поэтому вам придется применить представленный структурный подход. Не буду снова упоминать C — всегда существует обходное решение, которым можно воспользоваться в случае необходимости.

Заголовок связанного списка должен где-то храниться. Мы создадим структуру данных для хранения всего глобального состояния драйвера (вместо набора отдельных переменных). Определение структуры выглядит так:

В определении используется тип FastMutex, который был разработан в главе 6. Также в определении встречается RAII-обертка AutoLock на C++ (тоже из главы 6).

Функция DriverEntry

Функция DriverEntry для драйвера SysMon похожа на одноименную функцию драйвера Zero из главы 7. В нее нужно добавить регистрацию уведомлений процессов и инициализацию объекта Globals:

Функция диспетчеризации для чтения позднее будет использоваться для возвращения информации о событиях пользовательскому режиму.

Обработка уведомлений о выходе из процессов

В приведенном выше коде функция уведомления процессов называется OnProcessNotify, а ее прототип был представлен ранее в этой главе. Эта функция обратного вызова обрабатывает события создания и завершения процессов. Начнем с выхода из процессов, так как это событие намного проще создания процесса (как вы вскоре увидите). Общая схема функции обратного вызова выглядит так:

В случае выхода из процесса есть только идентификатор процесса, который необходимо сохранить (наряду с данными заголовка, общими для всех событий). Сначала необходимо выделить память для всей структуры, представляющей событие:

Если попытка выделения памяти завершается неудачей, драйвер ничего сделать не сможет, поэтому он просто возвращает управление из функции обратного вызова.

Затем нужно заполнить общую информацию: время, тип и размер элемента. Получить все эти данные несложно:

Сначала мы обращаемся к самому элементу данных (в обход LIST_ENTRY) через переменную info. Затем заполняется информация заголовка: тип элемента хорошо известен, так как текущей является ветвь, обрабатывающая уведомления о завершении процессов; время можно получить при помощи функции KeQuerySystemTimePrecise, возвращающей текущее системное время (UTC, не местное время) в формате 64-разрядного целого числа, с отчетом от 1 января 1601 года. Наконец, размер элемента — величина постоянная, равная размеру структуры данных, предоставляемой пользователю (а не размеру FullItem).

Функция API KeQuerySystemTimePrecise появилась в Windows 8. В более ранних версиях следует использовать функцию API KeQuerySystemTime.

Дополнительные данные при завершении процесса состоят из идентификатора процесса. В коде используется функция HandleToULong для корректного преобразования объекта HANDLE в 32-разрядное целое без знака.

А теперь остается добавить новый элемент в конец связного списка. Для этого мы определим функцию с именем PushItem:

Сначала код захватывает быстрый мьютекс, так как функция может вызываться сразу несколькими потоками одновременно. Все дальнейшее делается под защитой быстрого мьютекса.

Кроме того, драйвер ограничивает количество элементов связного списка. Такая предосторожность необходима, потому что ничто не гарантирует, что клиент будет быстро потреблять эти события. Драйвер не должен допускать неограниченное потребление данных, так как это может повредить системе в целом. Значение 1024 выбрано совершенно произвольно. Правильнее было бы читать это число из раздела драйвера в реестре.

Реализуйте это ограничение с чтением из реестра в DriverEntry. Подсказка: используйте такие функции API, как ZwOpenKey или IoOpenDeviceRegistryKey, а также ZwQueryValueKey.

Если счетчик элементов превысил максимальное значение, самый старый элемент удаляется; фактически связанный список рассматривается как очередь (RemoveHeadList). При освобождении элемента его память должна быть освобождена. Указателем на элемент не обязательно должен быть указатель, изначально использованный для выделения памяти (хотя в данном случае это так, потому что объект LIST_ENTRY стоит на первом месте в структуре FullItem<>), поэтому для получения начального адреса объекта FullItem<> используется макрос CONTAINING_RECORD. Теперь элемент можно освободить вызовом ExFreePool.

На рис. 8.2 изображена структура объектов FullItem.

image loader

Наконец, драйвер вызывает InsertTailList, чтобы добавить элемент в конец списка, а счетчик элементов увеличивается на 1.

Использовать атомарные операции инкремента/декремента в функции PushItem не обязательно, потому что операции со счетчиком элементов всегда выполняются под защитой быстрого мьютекса.

Обработка уведомлений о создании процессов

Обработка уведомлений о создании процессов создает больше проблем из-за непостоянного объема информации. Например, длина командной строки изменяется в зависимости от процесса. Сначала необходимо решить, какая информация должна сохраняться для создания процесса. Первая попытка:

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

Какие проблемы могут возникнуть при использовании приведенного определения?

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

А можно ли использовать решение следующего вида:

Нет, такое решение работать не будет. Во-первых, UNICODE_STRING обычно не определяется в заголовках пользовательского режима. Во-вторых (что намного хуже), внутренний указатель на символы обычно будет указывать в системное пространство, недоступное для пользовательского режима.

Ниже приведен другой вариант, который мы используем в драйвере:

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

С таким объявлением можно приступить к построению реализации для создания процесса:

Суммарный размер выделяемого блока зависит от длины командной строки. Начнем с заполнения неизменяющейся информации, а именно заголовка, идентификаторов процесса и родительского процесса:

Размер элемента должен вычисляться с учетом базовой структуры и длины командной строки.

Затем необходимо скопировать командную строку по адресу за базовой структурой, а также обновить длину и смещение:

Добавьте в структуру ProcessCreateInfo имя файла образа по той же схеме, что и для командной строки. Будьте внимательны при вычислении смещения.

Передача данных в пользовательский режим

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

Начнем обработку запроса чтения с получения адреса пользовательского буфера с применением прямого ввода/вывода (настраивается в DriverEntry):

Теперь необходимо обратиться к связанному списку и извлечь элементы из заголовка:

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

Наконец, запрос завершается с текущим статусом, а в поле Information сохраняется значение переменной count:

К функции выгрузки также стоит присмотреться повнимательнее. Если в связном списке присутствуют элементы, они должны быть освобождены явно; в противном случае возникнет утечка ресурсов:

Клиент пользовательского режима

После того как все будет готово, можно написать клиент пользовательского режима, который запрашивает данные вызовом ReadFile и выводит результаты.

Функция main вызывает ReadFile в цикле с небольшой приостановкой, чтобы поток не потреблял ресурсы процессора постоянно. Поступившие данные отправляются для вывода:

Функция DisplayInfo должна разобраться в структуре полученного буфера. Так как все события начинаются с общего заголовка, функция различает события по значению ItemType. После того как событие будет обработано, поле Size в заголовке указывает, где начинается следующее событие:

Для правильного извлечения командной строки в коде используется конструктор класса C++ wstring, который может построить строку по указателю и длине строки. Вспомогательная функция DisplayTime форматирует время в виде, удобном для чтения:

Драйвер устанавливается и запускается так, как было описано в главе 4.

Пример вывода, полученного при запуске SysMonClient.exe:

Уведомления потоков

Ядро предоставляет обратные вызовы создания и уничтожения потоков, аналогичные обратным вызовам процессов. Для регистрации используется функция API PsSetCreateThreadNotifyRoutine, а для ее отмены — другая функция, PsRemoveCreateThreadNotifyRoutine. В аргументах функции обратного вызова передается идентификатор процесса, идентификатор потока, а также флаг создания/уничтожения потока.

Расширим существующий драйвер SysMon, чтобы он получал не только уведомления процессов, но и уведомления потоков. Начнем с добавления значений перечисления и структуры, представляющей информацию, — все это добавляется в заголовочный файл SysMonCommon.h:

Затем можно добавить вызов регистрации в DriverEntry, непосредственно за вызовом регистрации уведомлений процессов:

Сама функция обратного вызова весьма проста, так как структура события имеет постоянный размер. Полный код функции обратного вызова для потока:

Большая часть кода выглядит довольно знакомо.

Чтобы завершить реализацию, мы добавим в клиент код для вывода информации о создании и уничтожении потоков (в DisplayInfo):

Пример вывода с обновленным драйвером и клиентом:

Добавьте в клиент код вывода имени образа процесса при создании и завершении потока.

Уведомления о загрузке образов

Последний механизм обратного вызова, который будет рассмотрен в этой главе, — уведомления о загрузке образов. Каждый раз, когда в системе загружается файл образа (EXE, DLL, драйвер), драйвер может получать уведомление.

Функция API PsSetLoadImageNotifyRoutine регистрируется для получения этих уведомлений, а функция PsRemoveImageNotifyRoutine отменяет регистрацию. Функция обратного вызова имеет следующий прототип:

Любопытно, что парного механизма обратного вызова для уведомления о выгрузке образов не существует.

Аргумент FullImageName не так прост. Как указывает аннотация SAL, он необязателен и может содержать NULL. Но даже если он отличен от NULL, он не всегда содержит точное имя файла образа.

Причины кроются глубоко в ядре и выходят за рамки книги. В большинстве случаев решение работает нормально, а путь использует внутренний формат NT, начинающийся с «DeviceHadrdiskVolumex…» вместо «c:…». Преобразование может быть выполнено разными способами. Тема более подробно рассматривается в главе 11.

Аргумент ProcessId содержит идентификатор процесса, в котором загружается образ. Для драйверов (образов режима ядра) это значение равно нулю.

Аргумент ImageInfo содержит дополнительную информацию об образе; его объявление выглядит так:

Краткая сводка важных полей структуры:

Для обращения к большей структуре драйвер использует макрос CONTAINING_RECORD:

В расширенной структуре добавляется всего одно осмысленное поле — объект файла, используемый для управления образом. Драйвер может добавить ссылку на объект (ObReferenceObject) и использовать его в других функциях по мере надобности.

Добавьте в драйвер SysMon уведомления о загрузке образов; драйвер должен собирать информацию только для образов пользовательского режима. Клиент должен выводить путь образа, идентификатор процесса и базовый адрес образа.

Упражнения

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

2. Напишите драйвер (или расширьте драйвер SysMon), который будет обнаруживать удаленное создание потоков, — то есть создание потоков в процессе, отличном от текущего. Подсказка: первый поток в процессе всегда создается «удаленно». Уведомите клиента пользовательского режима об этом событии. Напишите тестовое приложение, которое использует функцию CreateRemoteThread для тестирования.

Итоги

В этой главе были рассмотрены некоторые механизмы обратного вызова, предоставляемые ядром: уведомления процессов, потоков и образов. В следующей главе мы продолжим изучение механизмов обратного вызова — в ней будут рассмотрены уведомления объектов и реестра.

Для Хаброжителей скидка 25% по купону — Windows

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.

Источник

Windows 10 System Programming, Part 1

1603613923 cov250mkНазвание: Windows 10 System Programming, Part 1
Автор: Pavel Yosifovich
Издательство: Leanpub
Год: 2020
Страниц: 641
Язык: английский
Формат: pdf (true), epub
Размер: 18.1 MB

The term System Programming refers to programming close to an operating system level. Windows 10 System Programming provides guidance for system programmers targetting modern Windows systems, from Windows 7 up to the latest Windows 10 versions. The book uses the documented Windows Application Programming Interface (API) to leverage system-level facilities, including processes, threads, synchronization primitives, virtual memory and I/O. The book is presented in two parts, due to the sheer size of the Windows API and the Windows system facilities breadth. You’re holding in your hands (or your screen of choice) part 1.

Who Should Read This Book:
The book is intended for software developers that target the Windows platform, and need to have a level of control not achievable by higher-level frameworks and libraries. The book uses C and C++ for code examples, as the Windows API is mostly C-based. C++ is used where it makes sense, where its advantages are obvious in terms of maintenance, clarity, resource management, and any combination of the above. The book does not use non-trivial C++ constructs, such as template metaprogramming. The book is not about C++, it’s about Windows.

What You Should Know to Use This Book:
Readers should be very comfortable with the C programming language, especially with pointers, structures, and its standard library, as these occur very frequently in the Windows APIs. Basic C++ knowledge is highly recommended, although it is possible to traverse the book with C proficiency only.

Источник

Компиляторы и компоновщики

  • MASM32 (Macro Assembler) – наверное, самый популярный пакет самого популярного ассемблера от Стива Хатчессона aka Hutch (содержит в себе также PoAsm), рекомендую сразу скачать ml.exe 8.0 и заменить им входящий в пакет ml.exe 6.14
    • MASM64 by Hutch – набор файлов для 64-битной версии MASM (необходимо запустить makeall.bat, а потом обратить особое внимание на файл include64masm64rt.inc); файлы ml64.exe, link.exe и прочие потроха можно взять из Visual Studio (путь к папке с нужными файлами примерно такой: C:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.12.25827binHostx64x64)
    • MASM64 includes and libs – заголовки и библиотеки для 64-битного MASM’а от Vasiliy (тут главный файл – include64temphls.inc, который включён в набор Hutch’а и называется macros64vasily.inc, так что скачивать оба пакета смысла нет; однако информацию с сайта Василия почитать стоит)
    • Disassemble Help Library – Библиотека того же автора (Vasiliy) для дизассемблирования
    • Calculation Engine – Библиотека для работы с длинными числами (снова by Vasiliy)
  • fasm (flat assembler) – современный и удобный компилятор под DOS, Wndows, Linux с очень развитой системой макросов и полным набором инструкций Intel/AMD
  • NASM (Netwide Assembler) – ещё один современный кроссплатформенный компилятор с хорошей макросистемой и полным набором инструкций Intel/AMD, популярен в зарубежных проектах и при программировании под Linux/BSD
    • NASMX – пакет макросов, include’ов, примеров и утилит для NASM под Windows, Linux, BSD, Xbox; включает макрос invoke, символы для работы с OpenGL и пр.
    • Yasm (Yet another assembler…) – попытка переписать NASM, однако последняя версия датируется 2014 годом и, на мой взгляд, не имеет преимуществ перед NASM
  • UASM (он же HJWasm) – современный MASM-совместимый мультиплатформенный ассемблер с полным набором инструкций Intel/AMD
  • TASM 5.x (Turbo Assembler) – старый, но всё ещё популярный ассемблер, в основном используется для создания программ под DOS
  • GoAsm – ассемблер для написания программ под Windows (Вики)
  • Asmc Macro Assembler (с исходниками) – переделанный JWasm с довольно приличной библиотекой различных функций
  • fasmg (flat assembler g) – универсальный ассемблер под любую платформу (имеются include-модули для создания кода под AVR, i8051, x86/x64, генерации байт-кода JVM, аналогично можно создать свои модули; информация)
  • FASMARM – ассемблер под архитектуру ARM
  • ARM Keil MDK (Microcontroller Development Kit) – средство разработки и отладки для контроллеров ARM (ещё ссылка; дополнительные паки; документация [english])
  • GNU Arm Toolchain – тулчейн для компиляции ARM-приложений под Windows [i686], Linux [x86-64 и AArch64], macOS [x86-64] (ещё одна ссылка)
  • ALINK, GoLink – компоновщики для программ под DOS и Windows
  • objconv – преобразователь форматов объектных файлов (COFF/OMF/ELF/Mach-O)
  • Crinkler – популярный среди демомейкеров компоновщик-упаковщик
  • Godbolt: Compiler Explorer – популярный онлайн-компилятор разных языков с дизассемблером
  • Online Assembler and Disassembler – поддерживает x86, ARM, Mips, PowerPC, Sparc
  • Online x86 / x64 Assembler and Disassembler
  • Quick C++ Benchmark – бенчмарк и профайлер кода C++ (Clang/GCC)

Работа с ресурсами

  • ResEd – бесплатный редактор ресурсов
  • Resource Builder – редактор + компилятор ресурсов (shareware)
  • GoRC – компилятор ресурсов (rc → res) [в вышеупомянутом NASMX есть и GoLink, и objconv, и GoRC]

Наборы разработчика

  • Windows 10 Software Development Kit (SDK) – заголовочные файлы, библиотеки, инструменты (в т.ч. отладчик WinDbg: док1, док2, док3) для разработчиков Windows
  • Windows Driver Kit (WDK) – инструменты для разработчика драйверов (документация)

Среды разработки (IDE) для ассемблера

  • Fresh IDE – визуальная среда разработки для fasm
  • SASM (SimpleASM) – простая кроссплатформенная среда разработки для NASM, MASM, GAS, fasm с подсветкой синтаксиса и отладчиком (для NASM имеется набор макросов для упрощения работы с консолью)
  • ASM Visual – IDE для MASM, fasm, TASM со встроенным отладчиком и поддержкой WinDbg, OllyDbg, TD, x64dbg (имеется возможность установить весь пакет инструментов при установки IDE)
  • GUI Turbo Assembler – среда разработки со встроенным компилятором TASM, отладчиком и эмулятором DOSBox
  • Easy Code – IDE с поддержкой множества различных ассемблеров (Asmc, fasm, GoAsm, JWasm, MASM, PoAsm, UASM), встроенным отладчиком, редактором ресурсов и диалоговых окон
  • Rad ASM – стал частью FbEdit FreeBASIC code editor, ищите в папках RadASM* по указанной ссылке (Вики)
  • JaeEditor (fasm) – последнее обновление в 2015 году
  • GSS Visual Assembler – TASM, MASM32 и др. Последнее обновление в 2014 году!
  • FASM Editor – последнее обновление в 2011 году

Отладчики, дизассемблеры

  • OllyDbg – популярный 32-битный отладчик (готовится 64-битная версия, но пока ещё не вышла)
  • x64dbg – хороший отладчик для 32- и 64-битного кода
  • IDA Pro – мощный интерактивный дизассемблер (shareware)
  • Ghidra – инструмент для реверс-инжиниринга от NSA (агентства национальной безопасности США), поддерживающий разные типы процессоров (официальный сайт – требует VPN/Proxy; Wiki; статья на Habr «GHIDRA vs. IDA Pro»)
  • radare2 (r2) – свободный кроссплатформенный фреймворк для реверс-инжиниринга, написанный на Си, который включает дизассемблер, шестнадцатеричный редактор, анализатор кода и т.д. Используется при реверсе, отладке вредоносного ПО и прошивок (Вики; GUI Cutter).
  • Turbo Debugger – популярный отладчик под DOS
  • AFD Pro – ещё один отладчик под DOS
  • debug – реализация от легендарного Japheth, входящая в состав FreeDOS. Являясь полным клоном MS debug, имеет возможность выполнять отладку protect-mode DPMI-приложений. Больше ссылок, в т.ч. на репозиторий github, см. здесь
  • ldebug – новая реализация MS debug от другого разработчика, и хотя она не входит в состав FreeDOS, но программа доступна в репозитории, а также на сайте разработчика (документация; ещё ссылки)

Эмуляторы, виртуализаторы

  • DOSBox – очень популярный эмулятор компьютера для запуска программ под DOS (имеет встроенный замедлитель скорости)
    • Dosify me! – DOSBox онлайн
    • TweetX86 – ещё один DOSBox онлайн
  • emu8086 – простенький эмулятор процессора 8086 и некоторых функций MS-DOS со встроенным ассемблером и средой, включая отладчик
  • Bochs – эмулятор компьютера IBM PC
  • QEMU – эмулятор аппаратного обеспечения различных платформ (QEMU Manager)
  • Intel Software Development Emulator (SDE) – эмулятор расширений (инструкций) процессоров Intel
  • MS-DOS Player – удобно использовать при сборке проекта с помощью компиляторов DOS и Windows, а также при запуске консольных DOS-программ (графические режимы не поддерживаются)
  • Статья об эмуляторах DOS на этом форуме
  • VMware Workstation Player (бесплатный для персонального использования), VMware Workstation Pro (shareware) – мощные виртуализаторы, позволяющие создавать и запускать виртуальные машины
  • Oracle VirtualBox – альтернативный бесплатный виртуализатор
  • Sandboxie – песочница для запуска программ в изолированной среде (shareware)
  • Симуляторы ARM и других процессоров – хорошие симуляторы, однако имеются заморочки с написанием скриптов.

Редакторы PE и двоичных файлов

  • PE Explorer – редактор секций, ресурсов PE, дизассемблер (shareware)
  • Resourse Hacker – редактор ресурсов исполняемых файлов под Windows
  • Hiew – редактор двоичных файлов со встроенным дизассемблером, просмотром и редактированием заголовков исполняемых файлов (shareware)
  • HexIt – бесплатная альтернатива Hiew, но не такая красивая и довольно старая (2001 года)
  • WinHex – Hex-редактор, позволяющий редактировать не только файлы, но и диски (по секторам) и память, не имеет дизассемблера (shareware)
  • ImHex – бесплатный и активно развивающийся hex-редактор с дизассемблером (разных типов процессоров) и множеством интересных функций (github)

Упаковщики и протекторы

  • UPX (Ultimate Packer for eXecutables) – популярный бесплатный упаковщик EXE-файлов и DLL-библиотек
  • PECompact – ещё один упаковщик (shareware)
  • ASPack, ASProtect – упаковщик и протектор EXE-файлов
  • Themida – мощное средство защиты программ (shareware, статья на Хабре)
  • Enigma Virtual Box – бесплатный виртуализатор файлов, объединяющий исполняемый файл вместе с сопутствующими (dll, ocx, графическими и звуковыми файлами) в один (на этом сайте также имеется shareware-протектор Enigma Protector)

Профилировщики, анализаторы кода

  • Compiler Explorer — инструмент, позволяющий быстро перевести код на языках высокого уровня (C++, Pascal и многие другие) в инструкции ассемблера (статья на Хабре)
  • Quick C++ Benchmark — онлайн-бенчмарк кода на C++
  • Intel VTune Amplifier – фирменный профилировщик от Intel (входит в состав Intel Parallel Studio XE; shareware)
  • Intel Single Event API – бесплатный профилировщик от Intel с открытым исходным кодом
  • Valgrind – бесплатный профилировщик под Linux
  • Intel Architecture Code Analyzer (IACA) – анализатор кода от Intel (статья на Хабре)

Системные утилиты

  • Windows Sysinternals – набор системных утилит для Windows (работа с процессами, мониторы и прочее)
  • Rufus – утилита для создания загрузочных USB
  • WinSpy – утилита для получения информации об открытых окнах и управления ими

Операционные системы

  • ReactOS – бесплатная Windows-совместимая операционная система с открытым исходным кодом (Вики)
  • KolibriOS – миниатюрная ОС, умещающаяся на дискету 1.44 Mb, с исходниками на fasm (как скачать / ещё вариант; Вики)
  • Исходники Linux (на GitHub)
  • FreeDOS с исходниками (Вики)

Прочее

  • Far Manager – менеджер файлов в стиле Norton Commander с подсветкой кода в редакторе
  • AsmTidy – форматтер ассемблерных исходников в Intel-синтаксисе (бьютифайлер) на Perl (ему также посвящена отдельная тема на форуме)

Считаете, что здесь нет чего-то важного? Нашли ошибку или битую ссылку?
Пишите в специальную тему (предпочтительно) или в комментариях моего блога. Варез не размещаю!



7



This item cannot be shipped to your selected delivery location. Please choose a different delivery location.

This item cannot be shipped to your selected delivery location. Please choose a different delivery location.

Amazon book clubs early access

There was a problem loading your book clubs. Please try again.

Amazon book clubs early access

Join or create book clubs

Choose books together

Track your books

Bring your club to Amazon Book Clubs, start a new book club and invite your friends to join, or find a club that’s right for you for free.

Kindle app logo image

Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet, or computer — no Kindle device required. Learn more

Read instantly on your browser with Kindle for Web.

Using your mobile phone camera — scan the code below and download the Kindle app.

QR code to download the Kindle App

Flip to back Flip to front

Listen Playing… Paused   You’re listening to a sample of the Audible audio edition.
Learn more

Follow the Author

Something went wrong. Please try your request again later.

Windows 10 System Programming, Part 2 Bilingual Edition


  • Kindle

    $27.50




    Read with Our Free App



  • Hardcover

    $41.00

    3 New from $41.00

  • Paperback

    $26.81

    2 Used from $26.81 3 New from $39.18

Delve into programming the Windows operating system through the Windows API in with C++. Use the power of the Windows API to working with processes, threads, jobs, memory, I/O and more. The book covers current Windows 10 versions, allowing you to get the most of what Windows has to offer to developers in terms of productivity, performance and scalability.
This is the second part, continuing «Windows 10 System Programming part 1».

  1. Publication date

    September 19, 2021

  2. Dimensions

    7 x 1.25 x 10 inches

Product details

  • ASIN

    :

    B09GJKKBZP
  • Publisher

    :

    Independently published; Bilingual edition (September 19, 2021)
  • Language

    :

    English
  • Paperback

    :

    555 pages
  • ISBN-13

    :

    979-8480026320
  • Item Weight

    :

    2.14 pounds
  • Dimensions

    :

    7 x 1.25 x 10 inches
  • Best Sellers Rank: #892,346 in Books (See Top 100 in Books)
    • #111 in Windows 10 Guides
    • #346 in Microsoft C & C++ Windows Programming
    • #37,934 in Schools & Teaching (Books)

  • Customer Reviews:

Brief content visible, double tap to read full content.

Full content visible, double tap to read brief content.

Videos

Help others learn more about this product by uploading a video!

Upload your video

About the author

Follow authors to get new release updates, plus improved recommendations.

Brief content visible, double tap to read full content.

Full content visible, double tap to read brief content.

Pavel is a developer, trainer, author, and speaker. Pavel loves all things software and still sometimes misses his old Commodore 64. He’s also a PluralSight author and a former MVP.


Customer reviews


21 global ratings

No customer reviews

There are 0 customer reviews and 21 customer ratings.

Import Fees Deposit Included

Estimated Import Fees Deposit:

AED 10.65

We will collect the Import Fees Deposit at the time of your purchase and use it to cover applicable taxes and duties on import. Learn more. The total may change depending on the chosen shipping option and items in cart during checkout.

Usually ships within 7 days.

[{«displayPrice»:»AED 162.56″,»priceAmount»:162.56,»currencySymbol»:»AED»,»integerValue»:»162″,»decimalSeparator»:».»,»fractionalValue»:»56″,»symbolPosition»:»left»,»hasSpace»:true,»showFractionalPartIfEmpty»:true,»offerListingId»:»Sj4uGZV6D0M8rOuAE0GsgkoDsajY5f6jypha9qyb9kOSL0Ae2IMZP4eJqPDryZFbb7zTX01ahEWSE%2FUhbcoxhl%2FcNF%2BTNYkWj42jYUgCfz9zBNrYK6sBpU2%2F6EiZNakgoibaNXEKapMbpgnLcRABWb2gbTHZRKumLXZUf%2FXiPLhqwpSXMYstQ9wagork6wjq»,»locale»:»en-AE»,»buyingOptionType»:»NEW»}]

AED

AED 162.56


()
Includes selected options. Includes initial monthly payment and selected options.
Details

Initial payment breakdown

Delivery cost, date and order total (including tax) shown at checkout.

>
.:[ ПОЛЕЗНЫЕ ССЫЛКИ, КНИГИ, ИНСТРУМЕНТЫ ]:.
, последнее обновление: 29.03.2022

  


Сообщ.
#1

,
24.09.18, 10:27

    Moderator

    *******

    Рейтинг (т): 117

    Подборка литературы по низкоуровневому программированию
    (книги, статьи, техническая документация)

    user posted image

    Обучение программированию на ассемблере

    • Зубков С.В. Assembler для DOS, Windows и Unix. — ДМК Пресс, 2017. — 638 c. [электронная], ISBN 978-5-97060-535-6 (печать по требованию // бумажная оригинальная в мягкой обложке)
    • Руслан Аблязов. Программирование на ассемблере на платформе x86-64. — ДМК Пресс, 2016. — 302 с. [электронная], ISBN 978-5-97060-364-2 (печать по требованию // бумажная оригинальная в мягкой обложке)
    • Смоленцев М.Ю. Программирование на языке Ассемблера для 32/64-разрядных микропроцессоров семейства 80х86. Часть 1. — ИрГУПС, 2009. – 192 с. [PDF]
    • Смоленцев М.Ю. Программирование на языке Ассемблера для 32/64-разрядных микропроцессоров семейства 80х86. Часть 2. — ИрГУПС, 2009. – 192 с. [PDF]
    • Смоленцев М.Ю. Программирование на языке Ассемблера для 32/64-разрядных микропроцессоров семейства 80х86. Часть 3. — ИрГУПС, 2009. – 192 с. [PDF]
    • Смоленцев М.Ю. Программирование на языке Ассемблера для микропроцессоров i80х86. — ИрИИТ, 2007. — 600с. [PDF]
    • Норсеев Сергей. Разработка оконных приложений на Fasmе [PDF]
    • Статьи старого WASM’а – кладезь обучающего материала на самые разные низкоуровневые темы (крайне рекомендую!)
    • Статьи нового WASM’а – не менее ценные
    • Туториалы Iczelion’а – уроки от гуру ассемблера под Win32 API (на русском)
    • Туториалы Iczelion’а для fasm – опять же, на русском
    • Сказки дядюшки Римуса – туториалы Iczelion’а, адаптированные под Windows x64
    • Документация по fasm (flat assembler) [english] (примерно то же самое есть в архиве самого fasm [PDF] // русский перевод версии 1.71 от Dm808 (html-архив) // русский перевод версии 1.64 от Paranoik)
    • Документация по NASM (Netwide Assembler) [english] (русский перевод 2001 года в PDF // html-версия перевода)
    • Документация по MASM (Macro Assembler) [english, PDF]
    • Using as – документация по GAS / GNU Assembler (ещё одна ссылка; PDF [english]; по-русски)
        How to Use Inline Assembly Language in C Code (asm-вставки в GCC)
    • UASM с документацией (современный MASM-совместимый мультиплатформенный ассемблер) [english, PDF]
    • Документация по emu8086 на русском:
      СкачатьПрикреплённый файлemu8086_rus_help.zip (249,91 Кбайт, скачиваний: 681)
      [CHM] (англ. оригинал см. в папке documentation после установки эмулятора)
    • Документация по fasmg [english] (введение и обзор)

    Архитектура и инструкции процессоров Intel, AMD, ARM

    • Официальная документация Intel (4 тома) [всё на english, PDF]:
      • Том 1. Общая архитектура (Volume 1: Basic Architecture) [PDF]
      • Том 2. Справочник по набору инструкций (Volume 2: Instruction Set Reference) [PDF]
      • Том 3. Руководство по системному программированию (Volume 3: System Programming Guide) [PDF]
      • Том 4. Моделезависимые регистры (Volume 4: Model-Specific Registers) [PDF]

      Там же можно скачать все тома одним документом, либо с разбивкой на 10 томов, а также прочую документацию (например, по оптимизации)
      Корневой раздел сайта Intel для разработчиков

    • Официальная документация AMD (множество документов) [всё на english, PDF]
      Документация по архитектуре AMD64:

      • Том 1. Программирование приложений (Volume 1: Application Programming) [PDF]
      • Том 2. Системное программирование (Volume 2: System Programming) [PDF]
      • Том 3. Инструкции общего назначения и системные (Volume 3: General Purpose and System Instructions) [PDF]
      • Том 4. Мультимедийные 128- и 256-битные инструкции (Volume 4: 128-Bit and 256-Bit Media Instructions) [PDF]
      • Том 5. 64-битные мультимедийные инструкции и инструкции x87 (Volume 5: 64-Bit Media and x87 Floating-Point Instructions) [PDF]
      • Рекомендации по использованию компиляторов (Compiler Usage Guidelines) [PDF]
      • Руководство по оптимизации ПО (Software Optimization Guide) [PDF]

      Корневой раздел сайта AMD для разработчиков

    • Архитектура и система команд микропроцессоров x86 [на русском] (староватая документация; из описания расширений есть только x87, MMX, 3DNow! и SSE(1))
    • Intel Intrinsic Guide – руководство по интринсикам x86 от Intel [english]
    • X86 Opcode and Instruction Reference – исчерпывающие таблицы опкодов инструкций x86/x86-64 [english]
    • uops.info – таблица микроопераций
    • GCC x86 Options – список микроархитектур процессоров и наборов инструкций, поддерживаемых ими [english]
    • x86 instruction listings (список инструкций с указанием процессоров, в которых они появились) [english]
    • The Netwide Assembler Instruction List (ещё один список инструкций с указанием процессоров и дополнительной информацией, но без описания)
    • Документация ARM: по архитектурам, по процессорам [всё на english]
    • Arm Architecture Reference Manual for A-profile architecture [PDF]
      • ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition [PDF]
      • Instruction Set Assembly Guide for Armv7 and earlier Arm architectures Reference Guide [PDF] (онлайн-версия)
      • ARM Architecture Reference Manual Supplement ARMv8.1, for ARMv8-A architecture profile [PDF]
        • Arm Armv8-A A32/T32 Instruction Set Architecture [online]
        • Arm A64 Instruction Set Architecture [online]
      • Arm Architecture Reference Manual Supplement Armv9, for Armv9-A architecture profile [PDF]
        • Arm Armv9-A A64 Instruction Set Architecture [online]
      • Learn the architecture: AArch64 Instruction Set Architecture [online]
    • Intrinsics [online]
    • Quick Reference Cards:
      • ARM and Thumb-2 Instruction Set Quick Reference Card [PDF]
      • Vector Floating Point Instruction Set Quick Reference Card [PDF]
      • Thumb 16-bit Instruction Set Quick Reference Card [PDF]
    • Assembler User Guide: ARM and Thumb Instructions – документация Keil MDK [online]
    • ARM assembler in Raspberry Pi [online]

    Справочники по API-функциям, прерываниям, системным вызовам

    • Microsoft Developer Network (MSDN) [преимущественно english] (библиотека официальной технической документации для разработчиков под Windows: большой справочник по функциям WinAPI, интерфейсам, структурам данных, примеры кода и пр).
    • Ralf Brown’s Interrupt List (RBIL) [архив] (большой справочник по прерываниям DOS, портам ввода-вывода и т.п. // html-версия // ещё одна html-версия) [english]
    • DOS – справочник по прерываниям (и не только), краткий, зато на русском
    • Набор справочников под DOS:
    • Linux System Call Table (справочник по системным вызовам Linux’а для x86, x86_64, ARM и ARM64) [english]
    • Architecture calling conventions (справочник по системным вызовам Linux’а для разных платформ, включая x86 и ARM, 32/64 бита) [english]
    • Linux Syscall Reference (ещё один справочник по системным вызовам 32-битного Linux’а) [english]
    • Документация по системным вызовам Linux [на русском]

    Системное программирование, устройство операционных систем, BIOS

    • Марк Руссинович, Дэвид Соломон, Алекс Ионеску. Внутреннее устройство Microsoft Windows. — 6-е изд., часть 1. — Питер, 2013. — 800 с., ISBN 978-5-496-00434-3, 978-5-459-01730-4 (англ.: 978-0735648739) [товар закончился, но при желании найти всегда можно]
      Вышло 7-е издание этой части с Павлом Йосифовичем в качестве ещё одного соавтора – Питер, 2018 – 944 с., ISBN 978–5–4461–0663–9 (англ.: 978–3864905384).
    • Марк Руссинович, Дэвид Соломон, Алекс Ионеску. Внутреннее устройство Microsoft Windows. Основные подсистемы ОС. — 6-е изд., часть 2. — Питер, 2014. — 672 с. [электронная], ISBN 978-5-496-00791-7 (англ.: 978-0735665873)
      7-е издание этой части есть пока только на английском языке (ISBN 978-0135462409).
    • Джеффри Рихтер. Windows для профессионалов. Создание эффективных Win32-приложений с учётом специфики 64-разрядной версии Windows. — 4-е изд. — Питер, Русская редакция, 2001. — 752 с. (есть вариант книги 2008 г. на 720 с., но она тоже 4-го издания, с переводом 2000 года… в чём разница?), 5-272-00384-5, 978–5–7502–0360–4 (англ.: 1-57231-996-8) [товар закончился]
    • Джеффри Рихтер, Кристоф Назар. Windows via C&C++. Программирование на языке Visual C++ – 5-е изд. – Питер, 2009 – 896 с., ISBN 978–5–388–00205–1, 978–5–7502–0367–3, 978–0–7356–2424–5 (англ.: 978–0735624245).
    • Павел Йосифович. Работа с ядром Windows. – Питер, 2021 – 400 c., ISBN 978–5–4461–1680–5 (англ.: 978-1977593375).
    • Pavel Yosifovich. Windows 10 System Programming, Part 1 – 2020, ISBN 979-8634170381 [англ].
    • NTAPI Undocumented Functions (Microsoft Windows NT/2000/XP/Win7) [english]
    • Native API (там же: справочник по функциям) [на русском]
    • Роберт Лав. Ядро Linux. Описание процесса разработки. — 3-е изд. — Вильямс, 2014. — 496 с., ISBN 978-5-8459-1944-1
    • Роберт Лав. Linux. Системное программирование. — 2-е изд. — Питер, 2016. — 448 с., ISBN 978-5-496-01684-1, 978-1449339531 (бумажная в мягкой обложке)
    • System Management BIOS – спецификация SMBIOS
    • Дармаван Салихан. BIOS. Дизассемблирование, модификация, программирование (+ CD-ROM). — БХВ-Петербург, 2007. — 784 с., ISBN 978-5-9775-0050-0, 978-1-931769-60-0 [товар закончился]

    Программирование железа, драйверы

    • Михаил Гук. Аппаратные средства IBM PC. Энциклопедия. — 3-е изд. — Питер, 2008. — 1072 с., ISBN 978-5-46901-182-8 [товар закончился] (книга 2001 г. на 816 с., есть в продаже, ISBN 5-88782-290-2)
    • Владимир Кулаков. Программирование на аппаратном уровне. Специальный справочник (+ дискета). — 2-е изд. — Питер, 2003. — 848 с., ISBN 5-94723-487-4 [товар закончился]
    • Всеволод Несвижский. Программирование аппаратных средств в Windows (+ CD-ROM). — 2-е изд. — БХВ-Петербург, 2008. — 528 с. [электронная], ISBN 978-5-9775-0263-4 (бумажная в мягкой обложке)
    • Владимир Кулаков. Программирование дисковых подсистем (+ дискета). — Питер 2002. — 762 с., ISBN 5-318-00623-Х [товар закончился]
    • UEFI Specifications – спецификации UEFI (доп. ссылки) и ACPI (доп. ссылки)

    Оптимизация кода

    • Документация по оптимизации от Agner’а Fog’а (5 томов в одном архиве) [всё на english]:
      • Оптимизация на C++ под Windows, Linux и Mac (Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms) [PDF]
      • Оптимизация на ассемблере под платформы x86 (Optimizing subroutines in assembly language: An optimization guide for x86 platforms) [PDF]
      • Микроархитектура Intel, AMD и VIA (The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers) [PDF]
      • Таблицы инструкций Intel, AMD и VIA (Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs) [PDF]
      • Соглашения о вызовах для различных компиляторов и ОС (Calling conventions for different C++ compilers and operating systems) [PDF]

      Там же можно скачать различные исходники и готовые библиотеки (оптимизированные стандартные функции, класс для работы с векторами, полезные ссылки и прочее)
      На этом сайте так же имеется раздел, посвящённый генераторам псевдослучайных чисел

    • Ричард Гербер, Арт Бик, Кевин Смит, Ксинмин Тиан. Оптимизация ПО. Сборник рецептов. — Питер, 2010. — 352 с., ISBN 978-5-388-00131-3, 0976483211 [товар закончился]
    • SizeCoding – искусство создания крошечных программ (трюки для демосценеров) [english]

    Отладка, дизассемблирование, безопасность, RE

    • Книги Криса Касперски (много)
    • Статьи Криса Касперски [большой архив с PDF, DOC] (507 шт // доп. ссылка // ещё вариант)
    • X86 Opcode and Instruction Reference (справочник по инструкциям и их опкодам) [english]

    Программирование микроконтроллеров

    • Фрунзе А.В. Микроконтроллеры? Это же просто! — 4 тома:
      • Том 1. — Додэка XXI, ДМК Пресс, 2015. — 312 с., ISBN 978-5-97060-263-8
      • Том 2. — ИД Скимен, 2002. — 392 с., ISBN 5-94929-003-8, 5-94929-001-1 [товар закончился]
      • Том 3. — ИД Скимен, 2003. — 224 с., ISBN 5-94929-003-7, 5-94929-001-1 [товар закончился]
      • Том 4 (+ CD-ROM). — Додэка XXI, 2008. — 464 с., ISBN 978-5-94120-141-9

    Разное

    • Сайт поддержки учебных курсов д.т.н., профессора Кафедры вычислительных систем СибГУТИ Курносова Михаила Георгиевича (много слайдов лекций на актуальные темы, в основном про: параллельное программирование, распределённые вычислительные системы, OpenMP, оптимизация, векторизация кода и т.п.)
      Пример: Использование Time-Stamp Counter для измерения времени выполнения кода на процессорах с архитектурой Intel 64 и IA-32 [PDF]
      На сайте также есть 2 его книги:

      • Курносов М.Г. Введение в структуры и алгоритмы обработки данных. — Автограф, 2015. — 179 с., ISBN 978-5-9906983-4-5
      • Курносов М.Г., Пазников А.А. Основы теории функционирования распределенных вычислительных систем. — Автограф, 2015. — 52 с., ISBN 978-5-9906983-5-2
    • sandpile.org – The world’s leading source for technical x86 processor information (набор справочников по регистрам, опкодам, типам данных и пр.; насчёт полноты и актуальности данных не уверен)
      x86 architecture CPUID (справочник по CPUID, похож на достаточно полный и актуальный)


    Друзья, давайте пополнять этот список вместе! :good:
    Присылайте ссылки на полезную литературу или названия книг с указанием авторов в специальную тему.
    Только давайте собирать не всё подряд, а самое лучшее :)

    Guru

    Jin X



    Сообщ.
    #2

    ,
    24.09.18, 10:31

      Moderator

      *******

      Рейтинг (т): 117

      Инструменты для низкоуровневого программирования

      user posted image

      Компиляторы и компоновщики

      • MASM32 (Macro Assembler) – наверное, самый популярный пакет самого популярного ассемблера от Стива Хатчессона aka Hutch (содержит в себе также PoAsm), рекомендую сразу скачать ml.exe 8.0 и заменить им входящий в пакет ml.exe 6.14
        • MASM64 by Hutch – набор файлов для 64-битной версии MASM (необходимо запустить makeall.bat, а потом обратить особое внимание на файл include64masm64rt.inc); файлы ml64.exe, link.exe и прочие потроха можно взять из Visual Studio (путь к папке с нужными файлами примерно такой: C:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.12.25827binHostx64x64)
        • MASM64 includes and libs – заголовки и библиотеки для 64-битного MASM’а от Василия Сотникова (тут главный файл – include64temphls.inc, который включён в набор Hutch’а и называется macros64vasily.inc, так что скачивать оба пакета смысла нет; однако информацию с сайта Василия почитать стоит)
        • Disassemble Help Library – Библиотека того же автора (Василия Сотникова) для дизассемблирования
        • Calculation Engine – Библиотека для работы с длинными числами (снова от Василия Сотникова)
      • fasm (flat assembler) – современный и удобный компилятор под DOS, Wndows, Linux с очень развитой системой макросов и полным набором инструкций Intel/AMD
      • NASM (Netwide Assembler) – ещё один современный кроссплатформенный компилятор с хорошей макросистемой и полным набором инструкций Intel/AMD, популярен в зарубежных проектах и при программировании под Linux/BSD
        • NASMX – пакет макросов, include’ов, примеров и утилит для NASM под Windows, Linux, BSD, Xbox; включает макрос invoke, символы для работы с OpenGL и пр.
        • Yasm (Yet another assembler…) – попытка переписать NASM, однако последняя версия датируется 2014 годом и, на мой взгляд, не имеет преимуществ перед NASM
      • UASM (он же HJWasm) – современный MASM-совместимый мультиплатформенный ассемблер с полным набором инструкций Intel/AMD
      • TASM 5.x (Turbo Assembler) – старый, но всё ещё популярный ассемблер, в основном используется для создания программ под DOS
      • GoAsm – ассемблер для написания программ под Windows (Вики)
      • Asmc Macro Assembler (с исходниками) – переделанный JWasm с довольно приличной библиотекой различных функций
      • fasmg (flat assembler g) – универсальный ассемблер под любую платформу (имеются include-модули для создания кода под AVR, i8051, x86/x64, генерации байт-кода JVM, аналогично можно создать свои модули; информация)
      • FASMARM – ассемблер под архитектуру ARM
      • ARM Keil MDK (Microcontroller Development Kit) – средство разработки и отладки для контроллеров ARM (ещё ссылка; дополнительные паки; документация [english])
      • GNU Arm Toolchain – тулчейн для компиляции ARM-приложений под Windows [i686], Linux [x86-64 и AArch64], macOS [x86-64] (ещё одна ссылка)
      • ALINK, GoLink – компоновщики для программ под DOS и Windows
      • objconv – преобразователь форматов объектных файлов (COFF/OMF/ELF/Mach-O)
      • Crinkler – популярный среди демомейкеров компоновщик-упаковщик
      • Godbolt: Compiler Explorer – популярный онлайн-компилятор разных языков с дизассемблером
      • Online Assembler and Disassembler – поддерживает x86, ARM, Mips, PowerPC, Sparc
      • Online x86 / x64 Assembler and Disassembler
      • Quick C++ Benchmark – бенчмарк и профайлер кода C++ (Clang/GCC)

      Работа с ресурсами

      • ResEd – бесплатный редактор ресурсов
      • Resource Builder – редактор + компилятор ресурсов (shareware)
      • GoRC – компилятор ресурсов (rc → res) [в вышеупомянутом NASMX есть и GoLink, и objconv, и GoRC]

      Наборы разработчика

      • Windows 10 Software Development Kit (SDK) – заголовочные файлы, библиотеки, инструменты (в т.ч. отладчик WinDbg: док1, док2, док3) для разработчиков Windows
      • Windows Driver Kit (WDK) – инструменты для разработчика драйверов (документация)

      Среды разработки (IDE) для ассемблера

      • Fresh IDE – визуальная среда разработки для fasm
      • SASM (SimpleASM) – простая кроссплатформенная среда разработки для NASM, MASM, GAS, fasm с подсветкой синтаксиса и отладчиком (для NASM имеется набор макросов для упрощения работы с консолью)
      • ASM Visual – IDE для MASM, fasm, TASM со встроенным отладчиком и поддержкой WinDbg, OllyDbg, TD, x64dbg (имеется возможность установить весь пакет инструментов при установки IDE)
      • GUI Turbo Assembler – среда разработки со встроенным компилятором TASM, отладчиком и эмулятором DOSBox
      • Easy Code – IDE с поддержкой множества различных ассемблеров (Asmc, fasm, GoAsm, JWasm, MASM, PoAsm, UASM), встроенным отладчиком, редактором ресурсов и диалоговых окон
      • Rad ASM – стал частью FbEdit FreeBASIC code editor, ищите в папках RadASM* по указанной ссылке (Вики)
      • JaeEditor (fasm) – последнее обновление в 2015 году
      • GSS Visual Assembler – TASM, MASM32 и др. Последнее обновление в 2014 году!
      • FASM Editor – последнее обновление в 2011 году

      Отладчики, дизассемблеры

      • OllyDbg – популярный 32-битный отладчик (готовится 64-битная версия, но пока ещё не вышла)
      • x64dbg – хороший отладчик для 32- и 64-битного кода
      • IDA Pro – мощный интерактивный дизассемблер (shareware)
      • Ghidra – инструмент для реверс-инжиниринга от NSA (агентства национальной безопасности США), поддерживающий разные типы процессоров (официальный сайт – требует VPN/Proxy; Wiki; статья на Habr «GHIDRA vs. IDA Pro»)
      • radare2 (r2) – свободный кроссплатформенный фреймворк для реверс-инжиниринга, написанный на Си, который включает дизассемблер, шестнадцатеричный редактор, анализатор кода и т.д. Используется при реверсе, отладке вредоносного ПО и прошивок (Вики; GUI Cutter).
      • Turbo Debugger – популярный отладчик под DOS
      • AFD Pro – ещё один отладчик под DOS
      • debug – реализация от легендарного Japheth, входящая в состав FreeDOS. Являясь полным клоном MS debug, имеет возможность выполнять отладку protect-mode DPMI-приложений. Больше ссылок, в т.ч. на репозиторий github, см. здесь
      • ldebug – новая реализация MS debug от другого разработчика, и хотя она не входит в состав FreeDOS, но программа доступна в репозитории, а также на сайте разработчика (документация; ещё ссылки)

      Эмуляторы, виртуализаторы

      • DOSBox – очень популярный эмулятор компьютера для запуска программ под DOS (имеет встроенный замедлитель скорости)
        • [URL=https://Dosify me]Dosify me[/URL]! – DOSBox онлайн
        • TweetX86 – ещё один DOSBox онлайн
      • emu8086 – простенький эмулятор процессора 8086 и некоторых функций MS-DOS со встроенным ассемблером и средой, включая отладчик
      • Bochs – эмулятор компьютера IBM PC
      • QEMU – эмулятор аппаратного обеспечения различных платформ (QEMU Manager)
      • Intel Software Development Emulator (SDE) – эмулятор расширений (инструкций) процессоров Intel
      • MS-DOS Player – удобно использовать при сборке проекта с помощью компиляторов DOS и Windows, а также при запуске консольных DOS-программ (графические режимы не поддерживаются)
      • VMware Workstation Player (бесплатный для персонального использования), VMware Workstation Pro (shareware) – мощные виртуализаторы, позволяющие создавать и запускать виртуальные машины
      • Oracle VirtualBox – альтернативный бесплатный виртуализатор
      • Sandboxie – песочница для запуска программ в изолированной среде (shareware)
      • Симуляторы ARM и других процессоров – хорошие симуляторы, однако имеются заморочки с написанием скриптов.

      Редакторы PE и двоичных файлов

      • PE Explorer – редактор секций, ресурсов PE, дизассемблер (shareware)
      • Resourse Hacker – редактор ресурсов исполняемых файлов под Windows
      • Hiew – редактор двоичных файлов со встроенным дизассемблером, просмотром и редактированием заголовков исполняемых файлов (shareware)
      • HexIt – бесплатная альтернатива Hiew, но не такая красивая и довольно старая (2001 года)
      • WinHex – Hex-редактор, позволяющий редактировать не только файлы, но и диски (по секторам) и память, не имеет дизассемблера (shareware)
      • ImHex – бесплатный и активно развивающийся hex-редактор с дизассемблером (разных типов процессоров) и множеством интересных функций (github)

      Упаковщики и протекторы

      • UPX (Ultimate Packer for eXecutables) – популярный бесплатный упаковщик EXE-файлов и DLL-библиотек
      • PECompact – ещё один упаковщик (shareware)
      • ASPack, ASProtect – упаковщик и протектор EXE-файлов
      • Themida – мощное средство защиты программ (shareware, статья на Хабре)
      • Enigma Virtual Box – бесплатный виртуализатор файлов, объединяющий исполняемый файл вместе с сопутствующими (dll, ocx, графическими и звуковыми файлами) в один (на этом сайте также имеется shareware-протектор Enigma Protector)

      Профилировщики, анализаторы кода

      • Compiler Explorer — инструмент, позволяющий быстро перевести код на языках высокого уровня (C++, Pascal и многие другие) в инструкции ассемблера (статья на Хабре)
      • Quick C++ Benchmark — онлайн-бенчмарк кода на C++
      • Intel VTune Amplifier – фирменный профилировщик от Intel (входит в состав Intel Parallel Studio XE; shareware)
      • Intel Single Event API – бесплатный профилировщик от Intel с открытым исходным кодом
      • Valgrind – бесплатный профилировщик под Linux
      • Intel Architecture Code Analyzer (IACA) – анализатор кода от Intel (статья на Хабре)

      Системные утилиты

      • Windows Sysinternals – набор системных утилит для Windows (работа с процессами, мониторы и прочее)
      • Rufus – утилита для создания загрузочных USB
      • WinSpy – утилита для получения информации об открытых окнах и управления ими

      Операционные системы

      • ReactOS – бесплатная Windows-совместимая операционная система с открытым исходным кодом (Вики)
      • KolibriOS – миниатюрная ОС, умещающаяся на дискету 1.44 Mb, с исходниками на fasm (как скачать / ещё вариант; Вики)
      • Исходники Linux (на GitHub)
      • FreeDOS с исходниками (Вики)

      Прочее

      • Far Manager – менеджер файлов в стиле Norton Commander с подсветкой кода в редакторе
      • AsmTidy – форматтер ассемблерных исходников в Intel-синтаксисе (бьютифайлер) на Perl


      Считаете, что здесь нет чего-то важного? Нашли ошибку? Пишите в специальную тему (варез не размещаю) ;)

      Понравилась статья? Поделить с друзьями:
    • Windows 10 swapfile sys перенос на другой диск
    • Windows 10 swapfile sys pagefile sys зачем оба
    • Windows 10 super lite 32 bit
    • Windows 10 sun valley скачать торрент iso
    • Windows 10 sun valley дата выхода