Сейчас на форуме: asfa, _MBK_ (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Как замерить время исполнения функций в OLLYDBG?
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 января 2010 17:18 · Поправил: Yupiter
· Личное сообщение · #1

Требуется вывести в лог время исполнения разных функций исследуемой программы, для чего можно поставить на функции (call ... ) и сразу после них условные брейкпойнты. Что возможно сделать для того, чтобы в лог писались миллисекунды хотя бы от запуска Windows, программы и т.д., или может какой плагин есть на эту тему? Поиск не помог.




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 14 января 2010 17:30
· Личное сообщение · #2

плагинов таких нет, да вродебы и нет такой возможности в ольке, а зачем собствено возникло желание получения таких даных?

-----
Лучше быть одиноким, но свободным © $me





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 14 января 2010 17:36
· Личное сообщение · #3

А нужен ли отладчик вообще? Это зовётся профайлер.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 января 2010 17:48 · Поправил: Yupiter
· Личное сообщение · #4

BoRoV: "а зачем собствено возникло желание получения таких даных?"
Чтобы выяснить, какие функции выполняют всю необходимую на данный момент работу.

Archer:" А нужен ли отладчик вообще? Это зовётся профайлер."
Профайлер - что это такое, где почитать или где взять, прога на С++ писана?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 14 января 2010 18:38
· Личное сообщение · #5

Yupiter пишет:
Чтобы выяснить, какие функции выполняют всю необходимую на данный момент работу.

мда... у тебя в логе будут тучи левых ненужных фунок

-----
Лучше быть одиноким, но свободным © $me





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 14 января 2010 19:09
· Личное сообщение · #6

В гугл это почитать, открываешь гугл и пишешь: profiler или профайлер. И смотришь, что это такое, какие есть и тд. За тебя здесь гуглить не будут.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 января 2010 19:26 · Поправил: Yupiter
· Личное сообщение · #7

Такой вопрос, а то что к проге сорсов нет, профайлеру пофиг или нет? Может быть такое, что профайлер скачаю зря? Может он работает только с сорсами.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 14 января 2010 19:49
· Личное сообщение · #8

Да ты заколебал уже, возьми открой гугл и посмотри. И заодно определись, подойдёт ли он тебе или нужно что-то другое.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 января 2010 19:54 · Поправил: Yupiter
· Личное сообщение · #9

Вот функция GetTickCount (всего то ничего)
7C80932E MOV EDX,7FFE0000
7C809333 MOV EAX,DWORD PTR DS:[EDX]
7C809335 MUL DWORD PTR DS:[EDX+4]
7C809338 SHRD EAX,EDX,18
7C80933C RETN

Как это запрограммировать в OllyScript? Ещё не работал с OllyScript.
Archer, извини конечно, но мне думается, что и в Олли эту задачу можно решить без привлечения профайлеров.




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 14 января 2010 20:24
· Личное сообщение · #10

Yupiter пишет:
но мне думается, что и в Олли эту задачу можно решить без привлечения профайлеров.

ну раз думается, то ищи как это решить, а то другие об этих встроеных возможнастях не знают
и можешь еще посмотреть это http://exelab.ru/f/action=vthread&forum=5&topic=14847

-----
Лучше быть одиноким, но свободным © $me




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 января 2010 21:17 · Поправил: Yupiter
· Личное сообщение · #11

Наверное достаточно величины находящейся по адресу 7FFE0000, она со временем увеличивается, возможно там отсчитывается количество тактов процессора или ещё что то подобное, на миллисекунды вроде бы не похоже. По адресу 7FFE0004 значение так и не изменилось за более чем 10 минут.




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 14 января 2010 21:27
· Личное сообщение · #12

msdn.microsoft.com/en-us/library/aa915056.aspx

-----
Лучше быть одиноким, но свободным © $me





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 14 января 2010 21:34
· Личное сообщение · #13

Тогда уж msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx а не линк на мобильную винду.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 января 2010 21:37 · Поправил: Yupiter
· Личное сообщение · #14

Что записать в поле Expression условного брейкпойнта, чтобы значение из 7FFE0000 выводилось в лог в десятичном виде, а не в шестнадцатеричном? Возможно ли это сделать?



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 14 января 2010 21:49
· Личное сообщение · #15

Yupiter пишет:
Наверное достаточно величины находящейся по адресу 7FFE0000, она со временем увеличивается, возможно там отсчитывается количество тактов процессора или ещё что то подобное, на миллисекунды вроде бы не похоже. По адресу 7FFE0004 значение так и не изменилось за более чем 10 минут.


на масме подсчет через GetTickCount выглядит примерно так:
Code:
  1. Call GetTickCount
  2. MOV starttime,EAX
  3.  
  4. какой-то код
  5.  
  6.         CALL GetTickCount
  7.         MOV EBX,starttime
  8.         MOV ESI,EAX
  9.         SUB ESI,EBX
  10.         MOV EAX,010624DD3h
  11.         MUL ESI
  12.         MOV ECX,EDX
  13.         SHR ECX,6
  14.         MOV EAX,088888889h
  15.         MUL ECX
  16.         MOV EDI,EDX
  17.         MOV EAX,ECX
  18.         XOR EDX,EDX
  19.         MOV ECX,03Ch
  20.         DIV ECX
  21.         SHR EDI,5
  22.         TEST EDI,EDI
  23.         MOV ECX,EDX
  24.         JBE @1
  25.  
  26. invoke wsprintf,addr @123444,SADD("времени прошло: %luмин, %luсек"),edi,ecx
  27.  
  28.         JMP @end
  29.  
  30. @1:
  31.  
  32.         MOV EAX,ESI
  33.         XOR EDX,EDX
  34.         MOV ESI,03E8h
  35.         DIV ESI
  36. invoke wsprintf,addr @123444,SADD("времени прошло: %luсек., %luмс."),ecx,edx
  37. @end:





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 15 января 2010 16:55
· Личное сообщение · #16

Yupiter
rdtsc погугли
а также GetTickCount, что, собственно, почти аналогично.

а чтобы писать в лог - юзай любую апи записи в файл.

Если хочешь - пиши в личку, помогу с реализацией прямо из-под Ольки.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 января 2010 16:55 · Поправил: Yupiter
· Личное сообщение · #17

Code:
  1. 00563870     MOV EAX,DWORD PTR DS:[7FFE0000]
  2. 00563875     PUSH EAX
  3. 00563876     CALL 00444400
  4. 0056387B     PUSH EAX
  5. 0056387C     MOV EAX,DWORD PTR DS:[7FFE0000]
  6. 00563881     SUB EAX,DWORD PTR DS:[ESP+4]
  7. 00563886     ADD EAX,DWORD PTR DS:[00555500]
  8. 0056388C     MOV DWORD PTR DS:[00555500],EAX
  9. 00563891     POP EAX
  10. 00563892     RETN 4

Собираюсь добавить на свободное место код функции, чтобы вместо вызываемой функции (пусть она находится по адресу 00444400) идти туда и там делать засечки данных/времени из адреса 7FFE0000. По адресу 00555500 будем суммировать время нахождения в нашей функции, предварительно данные там занулив. Вопрос такой, что в функцию ещё нужно дописать, чтобы всё правильно отрабатывало? Не сделал ли я ошибок в написанном уже коде, так как в ассемблере я ещё не программировал.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 16 января 2010 15:36 · Поправил: Yupiter
· Личное сообщение · #18

Если кому интересно будет повозиться.
Исследуемый объект: http://www.metatrader4.com/files/mt4setup.exe
Исследуется модуль тестера, статьи по работе с этим модулем:
http://articles.mql4.com/ru/424, http://articles.mql4.com/ru/172 и http://fxrostov.narod.ru/st3.htm
После установки проги в папке "эксперты" есть пара экспертов-примеров, которые используют встроенные индикаторы в своей работе. В этом случае тестер работает быстро, если ещё выбрать режимы тестирования "генетический алгоритм" и "по ценам открытия".
Кроме стандартных встроенных индикаторов бывают самописные, которые закидывают в папку "эксперты\индикаторы". Пишутся они на си-подобном языке, есть в проге редактор для написания и компиляции. Если будет интерес, то далее выложу один такой индикатор. С использованием таких индикаторов как раз заметно возрастает время работы тестера. Что я уже заметил, так это то что при работе тестера скомпилованный файл индикатора многократно загружается, видимо происходит это при каждом обращении эксперта к индикатору для расчёта значений. При загрузке далее происходит ещё её расшифровка, так как компилированный файл шифруется, чтобы затруднить через декомпиляцию исследование запрограммированных торговых стратегий. Многократное повторение этих операций скорее всего и влияет на время работы тестера при использовани пользовательских индикаторов.
Тут выкладывали набор декомпиляторов http://goodservice.su/forum/42-647-48 для проги версий 218-224, сейчас же 225 версия этой проги.


 eXeL@B —› Вопросы новичков —› Как замерить время исполнения функций в OLLYDBG?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати