OSDev

для всех
Текущее время: 29 мар 2024, 15:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 02 ноя 2015, 23:36 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Ну в той же винде есть Sleep. Чем он не устраивает? Если хватает навыков воткнуть цикл из NOP-ов в асм-коде, то уж на один call с параметром явно должно хватить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 02 ноя 2015, 23:56 

Зарегистрирован: 28 ноя 2014, 23:58
Сообщения: 14
Bargest писал(а):
Ну в той же винде есть Sleep. Чем он не устраивает?

Не понял, о чём вы. Не могли бы вы ткнуть лицом в пример?

Bargest писал(а):
Если хватает навыков воткнуть цикл из NOP-ов в асм-коде, то уж на один call с параметром явно должно хватить.

Хватает ли навыков, не знаю, ибо не пробовал. Просто этот метод мне показался наиболее логичным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 03 ноя 2015, 00:07 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
Не понял, о чём вы. Не могли бы вы ткнуть лицом в пример?

ТЫЦ
Поскольку под x32 WinAPI вызывается, насколько я помню, через stdcall, достаточно впихнуть в код
Код:
push 100500 ; задержка в миллисекундах
call [Sleep]

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

Я очень удивлюсь, если в программе в импортах нету Sleep-а. В этом случае задача несколько усложнится - надо будет либо модифицировать секцию импорта, добавив туда Sleep, либо динамически получать его адрес, что создает не меньше геморроя.

Я не понимаю только одного - зачем.

EDIT:
Поправочка. На MSDN написано, что Sleep работает, начиная с WinXP. Но в некоторых местах пишут, что и в Windows 2000 все в порядке. Стоит проверить прежде, чем пилить патчи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 03 ноя 2015, 00:54 

Зарегистрирован: 28 ноя 2014, 23:58
Сообщения: 14
Bargest писал(а):
Я не понимаю только одного - зачем.

Зачем именно прогу переделывать? Как я уже писал, надо сохранить её переносимость. Не могу заставлять разных людей с разными виндами с околонулевой квалификацией ставить себе виртуалки ради одной проги.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 03 ноя 2015, 02:27 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 93
Bargest писал(а):
Поправочка. На MSDN написано, что Sleep работает, начиная с WinXP. Но в некоторых местах пишут, что и в Windows 2000 все в порядке. Стоит проверить прежде, чем пилить патчи.
Не надо верить последним MSDN ;)
Там до XP ничего не существует. Sleep есть начиная с NT 3.1 ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 04 ноя 2015, 12:10 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
Зачем именно прогу переделывать?

Не понятно, зачем вообще замедлять. Все всегда стараются сделать программу быстрее, чтобы человеку не тратить время впустую. В чем смысл осознанно делать на PC программу, которая будет тупить? Ладно если на МК, сам занимался таким, чтобы лампочки мигали с нужной частотой и т.д. Но на PC смысл замедлять программу, которая изначально не предполагала замедления, вообще не ясен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 04 ноя 2015, 15:27 

Зарегистрирован: 28 ноя 2014, 23:58
Сообщения: 14
Здесь наоборот, человек не успевает среагировать в момент, когда ему передаётся управление. Программа является тренажёром, поэтому тут ближе всего будет аналогия со старыми играми, которые сейчас тоже всячески пытаются замедлить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 06 ноя 2015, 20:56 

Зарегистрирован: 28 ноя 2014, 23:58
Сообщения: 14
Sleep в импортах нашёл. Возникла след. проблема: OllyDbg на CALL <JMP.&kernel32.Sleep> отвечает Unknown module. Хотя раньше по коду та же команда используется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 07 ноя 2015, 00:31 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
На stackoverflow есть решение. Можно проще - делать call по значению из указанного адреса, не заставляя Olly резолвить имена для ассемблирования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Процессоры
СообщениеДобавлено: 07 ноя 2015, 01:17 

Зарегистрирован: 28 ноя 2014, 23:58
Сообщения: 14
Спасибо. А не поможете найти место, в котором происходит итерация значения? Было бы замечательно, если бы вы подсказали, как отследить, какая команда в последний раз меняла FPU register ST5. Также я хотел бы узнать, как раскрутить (т. е. узнать адреса материнских ф-ций) стек.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB