![]() |
eXeL@B —› Вопросы новичков —› Способы посчитать время с момента начала работы процесса |
Посл.ответ | Сообщение |
|
Создано: 23 сентября 2009 08:46 · Личное сообщение · #1 Есть процесс. После двух минут работы одна из функций этого процесса прекращает работать. Когда ставлю процесс на паузу в отладчике, время для него не идёт. Т.е. я подозреваю, что посчитано время исполнения каких-то участков кода и оно просто суммируется где-то. Какой подход правильней всего использовать в данной ситуации для поиска? И как наиболее эффективно использовать для этого IDA? Просто Ооочень давно этим не занимался... Хочется видеть в теме перечисленные способы и ссылки на документы/разделы документов к IDA, чтоб не отнимать Ваше время на демагогии. Спасибо, VaD) ![]() |
|
Создано: 23 сентября 2009 10:16 · Личное сообщение · #2 Ты хочешь реализовать антиотладку основанную на замере времени? Не лучший выбор... Но вот ![]() |
|
Создано: 23 сентября 2009 10:28 · Личное сообщение · #3 Нет, я хочу исправить неправильно работающую dll-ку)) RDTSC, GetTickCount - не то, что могло бы работать в моём случае, хотя GetTickCount есть(4). Антиотладочных приёмов явных в dll нет, при заморозке процесса счётчик замораживается тоже, а значения GetTickCount-нет. Ещё там есть QueryPerformanceCounter, с помощью которого возможно и ведутся дальнейшие рассчёты времени работы процесса.... ![]() |
|
Создано: 23 сентября 2009 12:40 · Личное сообщение · #4 |
|
Создано: 23 сентября 2009 16:28 · Поправил: VaD · Личное сообщение · #5 |
|
Создано: 23 сентября 2009 17:40 · Личное сообщение · #6 |
|
Создано: 23 сентября 2009 18:14 · Поправил: VaD · Личное сообщение · #7 Вся проблема в том, что ядро этого синта работает на отдельном DSP (паверкор МК1) процессоре и без него VST dll не работает правильно...Так что боюсь что остальным придётся только гадать по коду. Но я сейчас загружу куда-нибудь инсталляшку (до недавнего времени она была доступна на оф. сайте акцесс-мьюзик)...С удовольствием сделал бы пак, который включал бы в себя все зависимости, если подскажете каким пакером это сделать (убейте-не помню сейчас, как он называется, но что-то было раньше...) Некоторые отладчики (w32Dasm например) не хотят загружать модули с такими длинными именами, я просто переименовал хост (он тоже понадобится чтобы dllку загрузить)(http://slil.ru/28009749) в vpc.exe, и "Vирус Паверкор Dемо.dll" в vpc.dll и от проблемы избавился. PS сорри что пишу английские слова русскими буквами, вдруг форум закешируется в гугле, у меня в ТС сразу акк заблокируют или ещё чё-нить нехорошее придумают. ![]() |
|
Создано: 25 сентября 2009 12:59 · Поправил: Crawler · Личное сообщение · #8 VaD так тебе надо, чтобы функция работала? надо потрэйсить да и посмотреть. что там используется, интересно. если rdtsc, можно драйвер эмуляции результатов взять на васме. А что за VST dll? синт какой-то, что ли? по-моему, большинство нормальных давно уже сломано, а бажные - исправлены. Кстати, странная хрень происходит в real guitar, там звук пропадает, хотя плаг ломаный. бред какой-то ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. ![]() |
|
Создано: 25 сентября 2009 18:32 · Личное сообщение · #9 Вот и тут звук пропадает...(с другими эвентами гораздо проще-знаешь, где их отслеживать.)Уж и не знаю, как это отследить, надо принципы работы (моменты передачи сгенерированного куска) получше изучить, трейсить умрёшь...слишком долго..RDTSC нет, есть другое предположение, оно сейчас прорабатывается...Синт акцесс вирус. ![]() |
|
Создано: 29 сентября 2009 13:07 · Личное сообщение · #10 VaD Если я тебя правильно понял, то можно, к примеру, прикрутить плагин к FLStudio, например, поставить точку останова на сообщение от клавиатуры, посмотреть, как генерится звучок. Потом, когда звук пропадет, сделать это еще раз и посмотреть отличия. Можно обращения к ASIO посмотреть, я хз, как там этот плагин устроен. Я вот хочу реал гитар разреверсить, поэтому и интересно ) убирали же как то такую проблему в Toxic 3 Biohazard. Правда, там не звучок исчезал, а генератор шума был. Видимо, все-таки какой-то хитрозадый таймер там присутствует. Может, к системному времени привязка какая-нибудь тупая... ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. ![]() |
|
Создано: 29 сентября 2009 18:06 · Поправил: VaD · Личное сообщение · #11 начну по порядку: 1) не к системному, ибо когда фризится(обычная пауза в дебаггере или бряк) плагин, время для него не идёт, а системное идёт (фризю не софтайсом, вроде во время софтайса даже время не идёт). Значит там считают какие-нить буфера, которые проходят к драйверу звуковухи......я если честно на той неделе халявил отн. исследований, по личным обстоятельствам... 2) с FLStudio не стал связываться ибо есть хорошая штука-легковесный VST хост (SAVIHost standalone VSTi host V1.32 у меня, такое вот оф. название) 3) звук генерируется 100% через жопу, ибо какая-то половина делается на отдельном процессоре в DSP карте (хотя было бы неплохо докопать до момента, когда выяснится что в данном случае это большая зелёная ненужная железяка)...Ещё раз-не было времени разобраться. PS эх блин, пока пост писал-запустил тот синт-звук просто улёт. Токсики и рядом не стоят... ![]() |
|
Создано: 09 октября 2009 11:44 · Поправил: VaD · Личное сообщение · #12 Важно: у меня сложности с глобальными брейкпоинтами. Есть некоторые процессы (запускаются дровами (или где-то рядом с этими дровами) к железке, на которой крутится ядро отлаживаемого синтезатора), которые мне нужно отследить. Если раньше в софтайсе на CreateProcess ставишь брейкпоинт, то всё ништяк находилось, а сейчас я даже и не представляю, где глобальный брейкпоинт поставить можно... Sice не ставится на SP3, насколько я успел мельком пробежаться. Как сейчас принято глобальные брейкпоинты ставить? update: Маленькие подробности, выясненные случайно) Прекращается не аудио, прекращается подача миди-сигналов генератору. Выяснено следующим образом: мышкой (лень было подключать миди-клаву) просто тупо игрались нотки на виртуальной клавиатуре в СавиХОСТе, и я решил попробовать наиграть мелодию не отпуская кнопки мыши "а-ля всегда нажатая клавиша". К моему удивлению по истечении стандартных 2х минут звук не прекратился, даже после 4х минут не прекратился!! Тогда я решил попробовать в секвенсор загрузить этот плагин и потестировать с клавиатуры (обычной компьютерной, но там она канает и в качестве миди). Ситуация сложилась следующим образом: в принципе когда на границе положенного времени начинаешь держать кнопку, звук идёт. Но стоит нажать параллельно вторую-звук пропадает, т.е. миди-канал "закрывается" при попытке посыла следующего миди-события (нажатия второй клавиши). Теперь я знаю что не надо копать в сторону аудио) ![]() |
|
Создано: 03 января 2010 16:30 · Личное сообщение · #13 Итак, на главный вопрос в начале темы ответ получен: считаются семплы, отданые драйверу асио. По достижению определённого количества семплов (чем больше частота дискретизации, тем меньше кол-во семплов отдаётся драйверу), т.е. если я выставляю на карточке частоту дискретизации 192 кГц, то синт работает всего 25-30 секунд или типа того, вместо 2х минут при 44100. Появился новый вопрос, как мне определить что за тип данных передаётся устройству. Происходит вызов ф-ии DeviceIOControl с параметрами API NODOC Arg00 = DeviceIoControl(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08) API Address=01FE1E23, API Return Address=01FE1E29 Arg01 = 00000180 Arg02 = 00220046 ->(LPDWORD)7e37f40b or (LPSTR)"" Arg03 = 00000000 Arg04 = 00000000 Arg05 = 00eb10f8 ->(LPDWORD)3f5bf556 or (LPSTR)"Võ[?uÉþ<éx¦X5¾%>ë_…ÕüºÓJJº¶dÿ^WÄ_;ƒ#aéÚ=hfð8NêŽ4Yè|ûKQ¤| ‰× èëD£" Arg06 = 0005ada8 ->(LPDWORD)3f5bf556 or (LPSTR)"" Arg07 = 0012e330 ->(LPDWORD)00000000 or (LPSTR)"" Arg08 = 00000000 RESULT for API DeviceIoControl Arg00 = 00000001 Arg01 = 00000180 Arg02 = 00220046 ->(LPDWORD)7e37f40b or (LPSTR)"" Arg03 = 00000000 Arg04 = 00000000 Arg05 = 00eb10f8 ->(LPDWORD)3f5bf556 or (LPSTR)"Võ[?uÉþ<éx¦X5¾%>ë_…ÕüºÓJJº¶dÿ^WÄ_;ƒ#aéÚ=hfð8NêŽ4Yè|ûKQ¤| ‰× èëD£" Arg06 = 0005ada8 ->(LPDWORD)3f5bf556 or (LPSTR)"" Arg07 = 0012e330 ->(LPDWORD)00000000 or (LPSTR)"" Arg08 = 00000000 где Arg05-это, как мне кажется начальный адрес памяти кода, который должен быть загружен на мотороловский процессор и исполнен там, но я пока не уверен, а Arg06- размер этого кода в памяти. Если я ошибаюсь, дайте знать... Дамп в аттаче. Кстати, он не сжимается раром, т.е. как будто бы в нём уже нет избыточной информации... ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Способы посчитать время с момента начала работы процесса |