OSDev
http://osdev.su/

Процессоры
http://osdev.su/viewtopic.php?f=18&t=1023
Страница 2 из 3

Автор:  Bargest [ 02 ноя 2015, 23:36 ]
Заголовок сообщения:  Re: Процессоры

Ну в той же винде есть Sleep. Чем он не устраивает? Если хватает навыков воткнуть цикл из NOP-ов в асм-коде, то уж на один call с параметром явно должно хватить.

Автор:  Bire [ 02 ноя 2015, 23:56 ]
Заголовок сообщения:  Re: Процессоры

Bargest писал(а):
Ну в той же винде есть Sleep. Чем он не устраивает?

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

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

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

Автор:  Bargest [ 03 ноя 2015, 00:07 ]
Заголовок сообщения:  Re: Процессоры

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

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

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

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

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

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

Автор:  Bire [ 03 ноя 2015, 00:54 ]
Заголовок сообщения:  Re: Процессоры

Bargest писал(а):
Я не понимаю только одного - зачем.

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

Автор:  dixie [ 03 ноя 2015, 02:27 ]
Заголовок сообщения:  Re: Процессоры

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

Автор:  Bargest [ 04 ноя 2015, 12:10 ]
Заголовок сообщения:  Re: Процессоры

Цитата:
Зачем именно прогу переделывать?

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

Автор:  Bire [ 04 ноя 2015, 15:27 ]
Заголовок сообщения:  Re: Процессоры

Здесь наоборот, человек не успевает среагировать в момент, когда ему передаётся управление. Программа является тренажёром, поэтому тут ближе всего будет аналогия со старыми играми, которые сейчас тоже всячески пытаются замедлить.

Автор:  Bire [ 06 ноя 2015, 20:56 ]
Заголовок сообщения:  Re: Процессоры

Sleep в импортах нашёл. Возникла след. проблема: OllyDbg на CALL <JMP.&kernel32.Sleep> отвечает Unknown module. Хотя раньше по коду та же команда используется.

Автор:  Bargest [ 07 ноя 2015, 00:31 ]
Заголовок сообщения:  Re: Процессоры

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

Автор:  Bire [ 07 ноя 2015, 01:17 ]
Заголовок сообщения:  Re: Процессоры

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

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/