|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
Зачем нужен драйвер и как написать простейший драйвер23.09.2012, 14:50. Показов 88570. Ответов 38
Метки нет (Все метки)
Хотя в интернете и есть на русском языке некоторые обяснения что такое драйвер для его програмирования считаю это довольно узко. Рускоязычные книги тоже не совсем понятно написаны. Вобщем мои рассуждения ( правильны ли они). Расссматриваю написания драйверов под виндовс. Для стабильности ОС програмисты разделиль функционирование ОС на две части - пользовательский режим и режим ядра, так как в пользовательском режиме возможности малы, то и испортить систему меньше шансов разным софтом. Драйвера работают в режиме ядра. Соответственно есть уже готовые функции API которые реализуют низкоуровневые операции и с помощью которых в основном и пишутся драйвера. Думаю что почти любой драйвер можна написать на основании этих функций + некоторые созданные собственно + асемблерные вставки. Соответственно драйвер считаю - это добавка до кода ОС, которая обясняяет как ей общаться с ОС. А как это делается ? Предполагаю что драйвер указывает какие низкоуровневые функции мы можем применить по отношению до даного устройства, указать какой приоритет у даного устройства. Неукладывается в голове что конкретно он делает. Вот подключаем мы какое-то неизвестное устройство до ПК. Оно подает какие то сигналы, и должно обрабатывать входящие. Для того чтобы просто работать с устройством ( ближе до человеческого языка) думаю что драйвер - это "образ" устройства в програмной форме - что то наподобе применения обектов в пользовательских приложениях (ООП). Тоесть мы создаем клас даного устройства, который описывает функции которые имеет даный обект и его свойства - не знаю какие. Кто как понимает - что делает драйвер. С чего начинается создание драйвера. Если допустим управлять внешним контроллером как выключателем. Почему написания драйверов кардинально отличается от написания пользовательського кода. Эсть ли какая то аналогичность. Очень хотелось бы чтобы человек который уже писал драйвера и четко все себе уяснил постарался по простому тезисно обяснить суть, самые важные аспекты по написанию драйверов.
2
|
|
| 23.09.2012, 14:50 | |
|
Ответы с готовыми решениями:
38
Как написать драйвер для COM-порта Как написать драйвер для флешки, шифрующий данные Помогите написать драйвер клавиатуры! |
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
||||||||||||||||
| 22.10.2012, 12:53 | ||||||||||||||||
|
Доступ к командам In/Out через изменение карты IOPM Драйвер scp08 написан на основе драйвера режима ядра UserPort 1.1 by Tomas Franzon изменение адреса начала IOPM в TSS расширяет размер TSS до 2FFFh работает с гипертрейдинговыми и многопроцессорными системами. Полнофункциональный драйвер. Далее исходный текст драйвера scp08.sys
Первый вариант user-mode приложения, которое запускает драйвер scp08.sys user-mode приложение, которое запускает scp08.sys драйвер, используя API-функции Service Control Manager'a: OpenSCManager, CreateService, StartService, CloseServiceHandle и DeleteService. Этот способ очень прост и хорошо документирован, он подходит для постоянной установки драйверов.
Второй вариант user-mode приложения, которое запускает драйвер scp08.sys Предварительно прописываем драйвер scp08.sys в реестре "вручную" (используем функции RegOpenKey, RegCreateKey, RegSetValue) и загружаем драйвер scp08.sys с помощью функции ZwLoadDriver. В реестре создается минимум необходимых записей, запускаем драйвер, выгружаем драйвер функцией ZwUnloadDriver и удаляем его раздел из реестра (используем функции RegCloseKey, SHDeleteKey). Этот способ позволяет запускать драйвер быстро и незаметно и подходит для маленьких программ не требующих установки, но требующих запуска своего драйвера.
________________________________________ __________________________________
© Mikl___ 2011
8
|
||||||||||||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 22.10.2012, 13:50 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Доступ к командам In/Out через установку user-mode приложению IOPL=3 Теория В процессорах Intel, начиная с i286, реализован четырехуровневый механизм защиты. Соответственно, имеется четыре уровня привилегий. Код или данные могут обладать каким-либо уровнем привилегии. Предполагалось, что прикладные программы, системные программы, ядро и т.д. будут работать на своих уровнях, и не будут иметь возможность произвольного доступа к более привилегированному коду или данным. На практике, ни одна ОС для Intel процессоров не использует все четыре уровня. Windows NT не является исключением, используются два уровня (кольца) привилегий. Уровень привилегий 0 (наиболее привилегированный уровень ― уровень супервизора) используется в режиме ядра с полным доступом (full-access kernel mode), и 3 уровень (наименее привилегированный) для более ограниченного режима пользователя (user mode). Текущий уровень привилегий ― Current Privilege Level (CPL) процессора хранится в двух младших битах регистра CS. CPU определяет уровень привилегий ввода/вывода ― I/O Privilege Level (IOPL), значение которого сравнивается с CPL чтобы узнать могут ли использоваться команды In/Out. IOPL хранится в двух битах регистра EFLAGS (биты 12, 13). Любой процесс с CPL большим, чем IOPL должен пройти через механизм защиты портов ввода/вывода. Так как IOPL не может быть меньше 0, программы, исполняющиеся на уровне привилегий 0 (kernel-mode драйвера устройств) будут всегда иметь прямой доступ к портам ввода/вывода. Windows NT устанавливает IOPL в 0. Код user-mode режима всегда имеет CPL равный 3, что больше чем IOPL. Следовательно, доступ к портам ввода/вывода в режиме user-mode должен проходить через механизм защиты. Определение того, что CPL меньше чем IOPL ― это первый этап в механизме защиты. Еще раз вернемся к псевдокоду команд IN/OUT
Внимание, вопрос ― а что нам мешает сделать IOPL равным 3? CPL = IOPL и обращение к портам, согласно псевдокоду, переходит в разряд непривилегированных операций, доступных для user-mode приложений Практика Программа делает CPL = IOPL из user-mode режима, драйвер не нужен.
Для того, что бы эта программа работала требуется для аккаунта разрешить привилегию "Действовать как часть операционной системы" ("Act as part of the operating system"), она же SeTcbPrivilege, но не обязательно активный. Аккаунт SYSTEM имеет эту привилегию включенной и активной. По умолчанию эта привилегия отключена даже для админского аккаунта. Описание привилегии "Работа в режиме операционной системы" Это право пользователя позволяет процессу олицетворять любого пользователя без подтверждения подлинности. Таким образом, процесс может получить доступ к тем же локальным ресурсам, что и пользователь. Процессы, которым необходима эта привилегия, должны использовать локальную учетную запись, уже включающую данную привилегию, а не отдельную учетную запись пользователя, которой эта привилегия была назначена специально. Если в организации используются только операционные системы семейства Windows Server 2003, предоставлять эту привилегию нет необходимости. Однако если в организации используются серверы под управлением Windows 2000 или Windows NT 4.0, может потребоваться предоставление этой привилегии программам, обменивающимся паролями в текстовом виде. По умолчанию данной привилегией обладает пользователь "Локальный компьютер". Предостережение! Назначение этой привилегии связано с риском для безопасности компьютера. Предоставляйте эту привилегию только надежным пользователям! Три способа получения привилегии SeTcbPrivilege:
После повышения текущей привелегии до SeTcbPrivilege запускается функция ZwSetInformationProcess, которая имеет четыре параметра:
Далее исходный текст
Разберем нашу программу по шагам. Сначала мы передаем функции LookupPrivilegeValue указатель на структуру LUID_AND_ATTRIBUTES и функция LookupPrivilegeValue заполняет эту структуру текущими значениями привилегии SeTcbPrivilege, далее, на основании данных из структуры LUID_AND_ATTRIBUTES заполняем структуру TOKEN_PRIVILEGES и передаем указатель на структуру TOKEN_PRIVILEGES функции AdjustTokenPrivileges. Но структура TOKEN_PRIVILEGES уже содержит внутри себя структуру LUID_AND_ATTRIBUTES!
при старте нашего приложения на вершине стека лежит адрес функции kernel32.TerminateProcess, а именно ее вызывает функция ExitProcess, поэтому заменяем вызов ExitProcess на команду retn, которая извлечет из стека адрес функции TerminateProcess и передаст на нее управление.
________________________________________ ____
© Mikl___ 2011
6
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
||||||
| 23.10.2012, 04:28 | ||||||
|
Доступ к командам In/Out через установку user-mode приложению IOPL=3 Доступ к портам ввода-вывода из user-mode приложения без драйвера Код выполняется с правами SYSTEM, что можно сделать, если работать как сервис, то есть с привилегией "Действовать как часть операционной системы" ("Act as part of the operating system"), она же SeTcbPrivilege. Далее вызывается функция ZwSetInformationProcess (-1, 16, 0, 0) и устанавливаем IOPL=3. Проверено под WinXP SP3. Идея взята здесь. Далее исходный текст scp13
________________________________________ ___
© Mikl___ 2011
5
|
||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
||||||||||||||||
| 23.10.2012, 06:32 | ||||||||||||||||
|
Доступ к командам In/Out через установку user-mode приложению IOPL=3 scp09 при открытии драйвера через CreateFile("\\.\scp09") получаем адрес процесса через IoGetCurrentProcess. Устанавливаем поле KPROCESS.Iopl равным TRUE, в user-mode приложении создаем и запускаем поток, содержащий команды In/Out, для этого нового потока IOPL обновится, следом, после переключения задач, обновится EFLAGS. Полнофункциональный драйвер. Далее исходный текст драйвера scp09.sys
Первый вариант user-mode приложения, которое запускает драйвер scp09.sys user-mode приложение, которое запускает scp09.sys драйвер, используя API-функции Service Control Manager'a: OpenSCManager, CreateService, StartService, CloseServiceHandle и DeleteService. Этот способ очень прост и хорошо документирован, он подходит для постоянной установки драйверов.
Второй вариант user-mode приложения, которое запускает драйвер scp09.sys Предварительно прописываем драйвер scp09.sys в реестре "вручную" (используем функции RegOpenKey, RegCreateKey, RegSetValue) и загружаем драйвер scp08.sys с помощью функции ZwLoadDriver. В реестре создается минимум необходимых записей, запускаем драйвер, выгружаем драйвер функцией ZwUnloadDriver и удаляем его раздел из реестра (используем функции RegCloseKey, SHDeleteKey). Этот способ позволяет запускать драйвер быстро и незаметно и подходит для маленьких программ не требующих установки, но требующих запуска своего драйвера.
________________________________________ ___
© Mikl___ 2011
6
|
||||||||||||||||
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
| 23.10.2012, 19:21 [ТС] | |
|
Где находятся функции используемые при написанни драйвера? Это системные функции ОС запакованые в dll? Какой нитерфейс предоставляет ОС и драйвер для взаимодействия?
Добавлено через 26 минут Где прочитать все функции используемые в драйверах и описание их? MSDN?
1
|
|
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
||||||||||||||||||||||
| 25.10.2012, 04:25 | ||||||||||||||||||||||
набираешь имя функции в строке поиска MSDN и там будет всё об этой функции, правда на английском, но есть Гугл-переводчик... Добавлено через 6 часов 47 минут Доступ к командам In/Out через установку user-mode приложению IOPL=3 Драйвер scp10 идентификатор процесса ProcessId получает через DeviceIoControl или из реестра или через WriteFile("\\.\scp10"). В функцию PsLookupProcessByProcessId передаем ProcessId и получаем указатель на KPROCESS. Устанавливаем поле KPROCESS.Iopl равным TRUE, в user-mode приложении создаем и запускаем поток, содержащий команды In/Out. Далее исходный текст драйвера scp10.sys
Первый вариант user-mode приложения, которое запускает драйвер scp10.sys user-mode приложение, которое запускает scp10.sys драйвер, используя API-функции Service Control Manager'a: OpenSCManager, CreateService, StartService, CloseServiceHandle и DeleteService. Этот способ очень прост и хорошо документирован, он подходит для постоянной установки драйверов.
Второй вариант user-mode приложения, которое запускает драйвер scp10.sys Предварительно прописываем драйвер scp10.sys в реестре "вручную" (используем функции RegOpenKey, RegCreateKey, RegSetValue) и загружаем драйвер scp10.sys с помощью функции ZwLoadDriver. В реестре создается минимум необходимых записей, запускаем драйвер, выгружаем драйвер функцией ZwUnloadDriver и удаляем его раздел из реестра (используем функции RegCloseKey, SHDeleteKey). Этот способ позволяет запускать драйвер быстро и незаметно и подходит для маленьких программ не требующих установки, но требующих запуска своего драйвера.
________________________________________
© Mikl___ 2011
5
|
||||||||||||||||||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
||||||||||||||||
| 26.10.2012, 03:49 | ||||||||||||||||
|
Доступ к командам In/Out через установку user-mode приложению IOPL=3 В драйвере scp11.sys получаем текущий поток и процесс, функция PsGetContextThread извлекает из стека ядра KTRAP_FRAME и преобразует его в структуру CONTEXT. В поле CONTEXT.RegEFlags устанавливаем флаги IOPL=3 и функция PsSetContextThread копирует переданный CONTEXT в KTRAP_FRAME. В user-mode приложении создаем и запускаем поток, содержащий команды In/Out. Полнофункциональный драйвер. Далее исходный текст драйвера scp11.sys
Первый вариант user-mode приложения, которое запускает драйвер scp11.sys user-mode приложение, которое запускает scp11.sys драйвер, используя API-функции Service Control Manager'a: OpenSCManager, CreateService, StartService, CloseServiceHandle и DeleteService. Этот способ очень прост и хорошо документирован, он подходит для постоянной установки драйверов.
Второй вариант user-mode приложения, которое запускает драйвер scp11.sys Предварительно прописываем драйвер scp11.sys в реестре "вручную" (используем функции RegOpenKey, RegCreateKey, RegSetValue) и загружаем драйвер scp11.sys с помощью функции ZwLoadDriver. В реестре создается минимум необходимых записей, запускаем драйвер, выгружаем драйвер функцией ZwUnloadDriver и удаляем его раздел из реестра (используем функции RegCloseKey, SHDeleteKey). Этот способ позволяет запускать драйвер быстро и незаметно и подходит для маленьких программ не требующих установки, но требующих запуска своего драйвера.
________________________________________ _____
© Mikl___ 2011
5
|
||||||||||||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
||||||||||||||||
| 26.10.2012, 04:31 | ||||||||||||||||
|
Доступ к командам In/Out через установку user-mode приложению IOPL=3 Далее исходный текст драйвера scp12.sys
Первый вариант user-mode приложения, которое запускает драйвер scp12.sys user-mode приложение, которое запускает scp12.sys драйвер, используя API-функции Service Control Manager'a: OpenSCManager, CreateService, StartService, CloseServiceHandle и DeleteService. Этот способ очень прост и хорошо документирован, он подходит для постоянной установки драйверов.
Второй вариант user-mode приложения, которое запускает драйвер scp12.sys Предварительно прописываем драйвер scp12.sys в реестре "вручную" (используем функции RegOpenKey, RegCreateKey, RegSetValue) и загружаем драйвер scp12.sys с помощью функции ZwLoadDriver. В реестре создается минимум необходимых записей, запускаем драйвер, выгружаем драйвер функцией ZwUnloadDriver и удаляем его раздел из реестра (используем функции RegCloseKey, SHDeleteKey). Этот способ позволяет запускать драйвер быстро и незаметно и подходит для маленьких программ не требующих установки, но требующих запуска своего драйвера.
________________________________________ __
© Mikl___ 2011
6
|
||||||||||||||||
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
| 28.10.2012, 22:26 [ТС] | |
|
Думаю для человека знающего на среднем уровне С++, C# идеальным вариантом для начала изучения драйверов будет => Новая модель драйвера книга "Windows Driver Foundation. ... Автор: Пенни Орвик, Гай Смит. Почитал содержание этой книги и обрадовался. Очень бы хотелось ее достать. В электронном варианте пока не нашел ( на русском языке). Если в кого есть дайте (111000110010@mail.ru)
1
|
|
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|||||||||||
| 29.10.2012, 06:49 | |||||||||||
|
Доступ к командам In/Out через CallGate scp14-00 для доступа к портам создает CallGate. К сожалению, не на всех машинах с WinXP SP3 псевдоустройство \Device\PhysicalMemory можно открыть с атрибутом SECTION_MAP_WRITE даже с правами Администратора (версия 5.1 сборка 2600.xpsp_sp3_qfe.080423-1303 service pack 3 позволяет, а версия 5.1 сборка 2600.xpsp.080413-2111 service pack 3 ― нет), но там, где открывается ― код работает. Идея калгейта взята у Ms-Rem из статьи «Перехват API функций в Windows NT (часть 3). Нулевое кольцо». Еще один способ, который позволяет перейти в нулевое кольцо и работать в нем не используя драйвер вообще. Способ этот основывается на открытии секции \Device\PhysicalMemory и модификации глобальной таблицы дескрипторов (GDT). В GDT добавляется дескриптор шлюза вызова CallGate, который указывает на наш код выполняющийся в нулевом кольце. После чего производится вызов шлюза командой дальнего вызова CALL FAR, которая изменяет привилегии кода и передает управление нашему коду
Следует обратить внимание на то, что нужную нам секцию нельзя сразу открыть на запись, так как полный доступ к ней имеет только система, нужно сначала изменить атрибуты безопасности секции разрешив текущему пользователю открывать её на запись, после чего секцию можно открыть и установить старые атрибуты безопасности обратно (для большей незаметности). Естественно все эти действия можно проделать только имея права администратора. В этом коде Ring0CallProc - адрес кода который может быть вызван через установленный шлюз и будет выполнен в нулевом кольце защиты. Селектор установленного шлюза будет равен DWORD(CurrentGate) - DWORD(ptrGDT) - offset, смещение неважно. Теперь для вызова нашего кода достаточно выполнить дальний вызов FAR CALL на установленный шлюз. Когда необходимость в шлюзе отпадет, его необходимо убрать. Далее исходный текст scp14
_________________________________
© Mikl___ 2011
4
|
|||||||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|||||||||||
| 29.10.2012, 07:16 | |||||||||||
|
Доступ к командам In/Out. Ответ ajak от Indy/Clerk'а Вопрос ― Как модифицировать IOPM?Ответ ― Логически подумать никак не получается? Если смещение карты IOPM находится за пределами сегмента TSS, то карта IOPM не используется, а доступ к портам определятся содержимым 12 и 13 битов в регистре флагов (поле IOPL). Если карта IOPM находится в пределах сегмента, то доступ к порту определяется соответствующим битом в ней. Так как VDM процессов может быть несколько, а карта IOPM для них только и используется (то есть для user-mode VDM процессов), значит смещение карты IOPM в TSS для этих процессов изменяется. Изменяться смещение может только шедулером, следовательно, где-то в информации связанной с процессом это смещение должно храниться. Известно, что описатель процесса (непосредственно объект) ― это структура EPROCESS. Взглянув на нее, сразу находим нужное поле:
Для подтверждения можно загрузить IOPM в TSS и установить смещение её в KPROCESS, после чего подождать, пока не произойдет свопинг посредством функции NtYieldExecution. После этого окажется что порт доступен, так как смещение будет загружено в TSS (разумеется на текущем процессоре). Ведь так просто ![]() ________________________________________ ______
© Mikl___ 2011
4
|
|||||||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 06.11.2012, 09:42 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Доступ к портам ввода/вывода через прерывание Вызовем код, содержащий команды in/out через какое-нибудь прерывание. При этом оно (и это вполне естественно) не должно использоваться системой. Пусть его номер будет, допустим, 99h. Содержимое дескрипторной таблицы прерываний (Interrupt Descriptor Table ― IDT) можно посмотреть утилитой IdtDump, написанной Four-F и входящей в KmdKit. Теория ― мать склероза
Далее индексируемся на описатель 99h прерывания в таблице IDT и меняем его так, чтобы управление передалось на нашу подпрограмму Дескрипторная таблица прерываний (Interrupt Descriptor Table, IDT), состоит из 8-ми байтных дескрипторов для каждого прерывания, которые могут содержать шлюзы задачи, прерывания и ловушки. Формат IDT напоминает дескриптор из GDT/LDT. Первое и последнее слова дескриптора шлюза прерывания содержат 32-х разрядный адрес обработчика прерывания (зеленое поле "смещение" на картинке). Второе слово содержит селектор сегмента кода, где находится код обработчика.
Практика ― сестра шизофрении
Далее исходный текст драйвера scp16.sys
______________________________
© Mikl___ 2012
6
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|
| 30.01.2014, 11:53 | |
|
системный динамик играет не «Марш клоунов» Нино Ротта, а "Марш гладиаторов" (Opus 68 march (Vjezd gladiátorů)) чешского композитора Julius Fučík (1872-1916), написан марш в 1897 году
0
|
|
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|
| 30.01.2014, 12:47 | |
|
А вот это "Марш клоунов" Нино Ротта
1
|
|
|
110 / 41 / 0
Регистрация: 30.09.2013
Сообщений: 575
|
||
| 19.03.2014, 18:47 | ||
|
0
|
||
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
| 19.03.2014, 18:53 [ТС] | |
|
Уолтер Они Windows Driver Model 2-е издание
1
|
|
|
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
|
|
| 30.06.2017, 08:16 | |
|
0
|
|
|
Модератор
|
|
| 30.06.2017, 18:08 | |
|
Как и многое другое из мира прошлого - в webarchive http://web.archive.org/web/201... hp?list=21
2
|
|
|
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
|
||||
| 04.07.2017, 14:22 | ||||
|
Добавлено через 29 минут Добавлено через 8 минут
0
|
||||
| 04.07.2017, 14:22 | |
|
Помогаю со студенческими работами здесь
39
Написать драйвер для мышки Можно ли написать свой драйвер для мышки? Как скорректировать драйвер принтера Как установить свой драйвер? Как работает драйвер swapBuffers Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|