|
0 / 0 / 0
Регистрация: 12.08.2019
Сообщений: 3
|
|||||||||||
Как управлять процессом компиляции и сборки драйвера12.08.2019, 13:56. Показов 1985. Ответов 5
Метки нет (Все метки)
Здравствуйте.
Некоторое время назад, появилось у меня желание заняться декомпиляцией одного драйвера. Зачем мне это нужно? - да из спортивного интереса, хочу понять как и что этот драйвер делает. Это занятие оказалось весьма увлекательным, декомпилированный исходник постепенно увеличивается, а код драйвера, получаемый при компиляции этого исходника, при определенных условиях, зачастую совпадает (или почти совпадает) с кодом исходного драйвера. Но, гладко получается не все, в связи с чем прошу у Вас помощи. Для начала о средствах разработки, посредством которых я работаю: - Windows Driver Kit (WDK 7600.16385.1); - Microsoft Visual Studio 2005; - Visual DDK, который производит некоторую интегрирацию WDK и VS. Вопрос первый. В коде исходного драйвера, точкой входа в драйвер является следующий код:
Когда я компилирую восстановленный мной исходник посредством только WDK (VS используется в качестве редактора текста исходника), точка входа в драйвер, так же имеет участок кода добавленный компилятором (правда выполняющий другие функции):
Ну и собственно сам вопрос, можно ли, при компиляции, как либо управлять кодом, который добавляется компилятором, или это не управляемый процесс, жестко зашитый в глубины компилятора? Вопрос второй. Связка VS и WDK (посредством Visual DDK) позволяет, при разработке драйвера, использовать компилятор VS и линкер WDK для создания файла драйвера. В таком варианте, с настройкой оптимизации компилятора для получения минимального размера конечного файла, мне удалось получить код, почти идентичный коду исходного драйвера (за исключением куска кода по которому задан первый вопрос, которого просто нет при компиляции средствами VS). И собственно вопрос, можно ли как либо произвести настройку оптимизации компилятора WDK?
0
|
|||||||||||
| 12.08.2019, 13:56 | |
|
Ответы с готовыми решениями:
5
Как из .NET управлять другим процессом? Ошибка компиляции и сборки Нюансы ручной сборки, линковки и компиляции |
|
Эксперт Hardware
|
||||||||
| 13.08.2019, 06:34 | ||||||||
|
это не компилятор вставляет, а разраб проверяет процессор на поддержку инструкции CPUID. Если она НЕ поддерживается - в строке(9) выходим из драйвера. Дальше со-строки(10) вызывается CPUID с EAX=1 или "Features". cmp eax,00000500h проверяет биты [11:8], а это семейство процессора "Family" (Intel/AMD etc). который добавляет компилятор, если функция имеет аргументы. Если аргументов нет, то эта батва не добавляется компилем. Добавлено через 11 минут кстати, в сишном хидере "ntstatus.h" перечисляются все коды-ошибок.. например в строке(19) первого листинга имеем mov eax,C0000001h и дальше retоткрываем хидер и видим:
0
|
||||||||
|
0 / 0 / 0
Регистрация: 12.08.2019
Сообщений: 3
|
||
| 13.08.2019, 13:18 [ТС] | ||
|
Но... Если исходить из того, что код, добавленый используемым мной компилятором является прологом (и это только пролог, а ни как не ...пролог и эпилог функции так как переход непосредственно на саму функцию, которой является NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath), происходит в последней, 7-й строке данного кода jmp L00010BC0), то, код проверки процессора (код из первого листинга, из исходного драйвера), добавлен разработчиком как пролог к функции, причем к точно такой же функции NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) (которая к слову имеет аргументы), и переход на которую осуществляется почти в самом конце пролога (в строке 17 jmp L00016288), если процессор подходящий (следом за этим переходом, в конце этого кода, только выход из драйвера при неподходящем процессоре).И теперь переформулирую свой вопрос, как можно повлиять на пролог, который добавляется компилятором, мне нужно что бы перед вызовом функции вызывался пролог, который написал я сам, допустим проводящий проверку подходит ли данный процессор для этого драйвера? Это возможно?
0
|
||
|
Эксперт Hardware
|
|||
| 13.08.2019, 15:39 | |||
|
пролог - push ebp --> mov ebp,esp, а эпилог - pop ebp --> retесли учесть call в строке(5), то рано или поздно pop ebp получит управление. только не понятно, куда подевался тут ret.если параметры всё-таки нужны, то засылать их в стек до вызова функции мне непонятно одно.. зачем вы ведёте борьбу за лишние 4-байта? ну есть этот пролог, да и пусть будет.. кому он мешает?
0
|
|||
|
0 / 0 / 0
Регистрация: 12.08.2019
Сообщений: 3
|
||||||||||||||||
| 13.08.2019, 16:17 [ТС] | ||||||||||||||||
|
Увы и ах,
ret в данном участке отсутствует. Вот он более полно:
call SUB_L00011105 вызывает следующую функцию (которую тоже писал не я, ее добавил компилятор):
jmp L00010BC0 идет переход на DriverEntry, которую писал я:
retМне это нужно, не для экономии нескольких байт, я хочу восстановить исходник и во всех подробностях понять как и что делает этот драйвер. Добавлено через 14 минут Смысл того что я делаю, сводится к тому, чтобы выставить настройки компиляции такими, какими они были у разработчика. Вероятно, со временем, я сам смогу найти ответы на свои вопросы, но с Вашей помощью, я надеюсь, эти ответы будет проще отыскать. P.S. На всякий случай, для данной функции я не в состоянии передать параметры, функция вызывается операционной системой при старте, при загрузке драйвера.
0
|
||||||||||||||||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|||
| 14.08.2019, 20:32 | |||
|
Добавлено через 17 минут Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.207 for 80x86 Что-то я не вижу в нем других опций кроме /arch:<SSE|SSE2> minimum CPU architecture requirements, one of: SSE - enable use of instructions available with SSE enabled CPUs SSE2 - enable use of instructions available with SSE2 enabled CPUs Наверно разработчик использовал VS. Укажи в настройках этой студии целовой процессор Пень = 586. Есть наверно у нее такие настройки. И посмотри появится ли у тебя эта преамбула с инструкцией cpuid при компиляции.
0
|
|||
| 14.08.2019, 20:32 | |
|
Помогаю со студенческими работами здесь
6
Roslyn, (статическая?) линковка сборки при компиляции Ошибки при компиляции сборки декомпилированной DnSpy Изменить версию сборки при каждой компиляции Научите делать (интегрировать в PE и обычные сборки драйвера и программы) [Gentoo] Какие есть сборки для установки без компиляции? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|