Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Какой - то не понятный маленький отрезок кода ??? Разбирай !  (Прочитано 13887 раз)
0 Пользователей и 1 Гость смотрят эту тему.
buisyhanh
Постоялец

vn
Offline Offline

« : 12-11-2008 04:48 » 

Люди ! Когда я читал диассемблерный код драйвера, часто встречал такой не понятный отрезок кода:
mov eax,[ntoskrnl.exe!KeTickCount]
   mov [ebp-04h],eax
 L0001069B:
   mov eax,[ebp-04h]
   mov eax,[eax+04h]
   mov [L000111EC],eax
   mov ecx,[ebp-04h]
   mov ecx,[ecx]
   mov [L000111E8],ecx
   mov ecx,[ebp-04h]
   cmp eax,[ecx+08h]
   jz  L000106BD
   pause ; SSE2
   jmp L0001069B
 L000106BD:
   mov eax,[L00011180]
   cmp eax,FFFFFFFEh
   jz  L000106CD
   push eax


Кто -то разбирайте его, подскажите пожалуйста !!!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 12-11-2008 08:01 » 

Я думаю, что это цикл ожидания чего-то, пока значения двух dword в памяти не совпадут.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
buisyhanh
Постоялец

vn
Offline Offline

« Ответ #2 : 12-11-2008 08:33 » 

Да именно так, но тут сохранить TickCount, как я понимаю что - там есть pointer [L000111E8] на TickCount value, pointer + 4  [L000111EC] будет на следующее значение, а Potiter + 8 (cmp eax,[ecx+08h]) еще на какое то другое. Но вижу повторение этого цыкла в нескольких местах, а именно для обработки нажатия клавиш. Но для чего применять этот я не знаю.
 Вы имеете какое понятие связанное с применением TickCount значения.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 12-11-2008 08:52 » 

применение может быть простое - например, защита от дребезга или задержка перед началом повтором (когда долго держат клавишу)
Записан

buisyhanh
Постоялец

vn
Offline Offline

« Ответ #4 : 12-11-2008 10:42 » 

Спасибо за ответами ! Hо все равно - этот же вопрос еще разбираю дальше, если что пост свои замечания !!!
Записан
buisyhanh
Постоялец

vn
Offline Offline

« Ответ #5 : 13-11-2008 09:38 » 

Вы знаете как изменяется TickCount значение ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 13-11-2008 10:50 » 

полагаю,

Код:
GetTickCount

The GetTickCount function retrieves the number of milliseconds that have elapsed since the system was started. It is limited to the resolution of the system timer. To obtain the system timer resolution, use the GetSystemTimeAdjustment function.


DWORD GetTickCount(void);

Parameters
This function has no parameters.
Return Values
The return value is the number of milliseconds that have elapsed since the system was started.

Remarks
The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.

If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.

To obtain the time elapsed since the computer was started, retrieve the System Up Time counter in the performance data in the registry key HKEY_PERFORMANCE_DATA. The value returned is an 8-byte value. For more information, see Performance Monitoring.

Записан

buisyhanh
Постоялец

vn
Offline Offline

« Ответ #7 : 13-11-2008 11:00 » 

Thanks alot, but GetTickCount  is not getting the Tick Count value. And TickCount Value I think that is not measure in miliseconds
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 13-11-2008 11:20 » 

а, функция то KeTickCount Улыбаюсь  У меня в мсдн нет про неё
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 16-11-2008 08:48 » 

Алексей1153++,
это ядро) недокументированная функция помоему...
счетчик на прерывании таймера. если умножить на период таймера - получится текущее время. период таймера в 100нс интервалах задается.

по DDK функции начинающиеся на
Ke... - ядро кернел
Mm... - ядро-память
Ex... - ядро общие
Io... - ядро ввод-вывод
Ps... - ядро процессы.
...остальные на память не помню)

в данном контексте - судя по всему структура, в которой ?наверное? лежат данные счетчики. из этой структуры здесь используется 3 DWORD слова. короче необходимо описание структуры.
первые два переписываются по адресам  [L000111E8]  [L000111EC]

Код:
do{
  [L000111EC] <- [ntoskrnl.exe!KeTickCount+4] ;eax
  [L000111E8] <- [ntoskrnl.exe!KeTickCount+0]
  if ([ntoskrnl.exe!KeTickCount+8] ==  [ntoskrnl.exe!KeTickCount+4])
     goto label L000106BD:
  pause ; SSE2  -видимо ожидание прерываний. (давно асемблер не использовал)
}while(1)

label  L000106BD:
   mov eax,[L00011180]
   cmp eax,FFFFFFFEh
    jz  L000106CD;          if ([L00011180] == -1)   goto label  L000106CD
   push eax
в сумме - кусок кода ожидает истечения промежутка времени.... как-то так.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
buisyhanh
Постоялец

vn
Offline Offline

« Ответ #10 : 17-11-2008 07:05 » 

Видно что - это код ожидания, но сколько времени и как реализовать ожидание - у вас есть примеры ?
Записан
buisyhanh
Постоялец

vn
Offline Offline

« Ответ #11 : 17-11-2008 08:43 » 

Наверно этот код вызывается какой то функцией .
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 17-11-2008 08:45 » 

Offtopic:

загадка.
летят два крокодила: один - на север, второй - зеленый.
вопрос: сколько стоит киллограм гвоздей?
Поставлю в угол.

откуда я знаю сколько вам необходимо ожидание? Жжешь
как реализовать - другой вопрос, стандартных функций полно) а пример вы сами в начале привели, его и обсуждали Ага
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines