Сейчас на форуме: jinoweb (+6 невидимых)

 [email protected] —› Программирование —› Windows kernel - перезаписываются глобальные переменные
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 24 марта 2018 00:14
· Личное сообщение · #1

Здрасте, такой вопрос. Есть у меня драйвер, ничем особо не примечательный. Юзаю я в нём парочку глобальных переменных. И вот что странно - пока я работаю с ними внутри DriverEntry - всё супер. Как только пытаюсь их считать из другого потока, то оказывается, что в них уже другие значения лежат. Как так-то? Заменил работу с глобальными переменными на пару IoAllocateDriverObjectExtension/IoGetDriverObjectExtension, и всё стало супер.
Что же с глобальными переменными не так?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 24 марта 2018 14:36
· Личное сообщение · #2

ARCHANGEL

Один поток асинхронно пишет, второй читает - вот и получаются другие" значения.

-----
vx





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 26 марта 2018 14:11 · Поправил: ARCHANGEL
· Личное сообщение · #3

Такой ситуации у меня нет. DriverEntry содержит код, в котором инициализируется глобальная переменная. После этого создаётся другой поток. После инициализации. И вот в контексте другого потока делается чтение. Но в тот момент глобальная переменная содержит уже совсем другое значение.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 26 марта 2018 14:15
· Личное сообщение · #4

Что мешает взять и отладить? Тем более, что ни кода, ничего нет.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 26 марта 2018 18:34
· Личное сообщение · #5

ARCHANGEL

А как по вашему изменяется память, нужен поток который пишет и адрес области. Иначе выборка данных происходить не может. Вы допустили асинхронный доступ к данным и не можете это отладить. Есть есчо вариант что вы передали ссылку на глобальную переменную в некоторую ядерную апи, а спустя время асинхронно произошла выборка. В любом случае это асинхронный доступ к переменной. Это ваши ошибки, а не архитектуры.

-----
vx


| Сообщение посчитали полезным: Alchemistry
 [email protected] —› Программирование —› Windows kernel - перезаписываются глобальные переменные
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати