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/ |