Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых) |
eXeL@B —› Основной форум —› Olly (Unknown Command) |
Посл.ответ | Сообщение |
|
Создано: 27 февраля 2005 19:13 · Личное сообщение · #1 подскажите новичку пожалуйста - что делать с Unknown Command в Olly дебаггере.... почему он их не распознает?... и еще вопрос - можно ли поставить корректный брейк на возврат функции (как в TD например).... я отлаживаю DOS программу... F8 циклится на куске 00000B28 2E:FE ??? ; Unknown command 00000B2A D328 SHR DWORD PTR DS:[EAX],CL 00000B2C 2E:FE ??? ; Unknown command 00000B2E D328 SHR DWORD PTR DS:[EAX],CL 00000B30 2E:FE ??? ; Unknown command 00000B32 D7 XLAT BYTE PTR DS:[EBX+AL] 00000B33 282E SUB BYTE PTR DS:[ESI],CH 00000B35 FE ??? ; Unknown command 00000B36 D328 SHR DWORD PTR DS:[EAX],CL 00000B38 2E:FE ??? ; Unknown command 00000B3A D328 SHR DWORD PTR DS:[EAX],CL 00000B3C 2E:FE00 INC BYTE PTR CS:[EAX] 00000B3F 0037 ADD BYTE PTR DS:[EDI],DH 00000B41 0305 00060002 ADD EAX,DWORD PTR DS:[2000600]ожидая ввода.... я утанавливаю Till Ret.... перехожу в программу - ввод недоступен... а если останавливаю и выбираю Run - то проскакиваю нужное место и программа выдает "ПАРОЛЬ НЕВЕРНЫЙ".... не бейте сильно - я в этом деле новичок .... помогите пожалуйста.... |
|
Создано: 27 февраля 2005 19:19 · Личное сообщение · #2 |
|
Создано: 27 февраля 2005 19:25 · Личное сообщение · #3 |
|
Создано: 27 февраля 2005 19:28 · Личное сообщение · #4 |
|
Создано: 27 февраля 2005 19:30 · Личное сообщение · #5 |
|
Создано: 27 февраля 2005 19:45 · Личное сообщение · #6 |
|
Создано: 27 февраля 2005 20:32 · Личное сообщение · #7 |
|
Создано: 27 февраля 2005 20:34 · Личное сообщение · #8 |
|
Создано: 27 февраля 2005 20:36 · Поправил: Ara · Личное сообщение · #9 |
|
Создано: 27 февраля 2005 20:57 · Поправил: JsK · Личное сообщение · #10 |
|
Создано: 27 февраля 2005 21:04 · Личное сообщение · #11 |
|
Создано: 27 февраля 2005 21:10 · Личное сообщение · #12 |
|
Создано: 27 февраля 2005 21:12 · Личное сообщение · #13 |
|
Создано: 27 февраля 2005 21:13 · Личное сообщение · #14 |
|
Создано: 27 февраля 2005 21:15 · Личное сообщение · #15 другая проблема... после запуска под DLDR.... моя программа выдает... Memory used by program=69424 то есть ей нужно 260 чтобы работать, в досе всего 640, 570 как видно жрет SI.... что делать?...=(... у меня такая же ошибка возникала с ранней версией TD, но в версии 5.5 исчезла, т.к. там используется TDX меньшего размера для загрузки... |
|
Создано: 27 февраля 2005 21:25 · Поправил: JsK · Личное сообщение · #16 Ara ТД - гут... но я никак не могу найти в нем свой ключевой момент..... возможно сказывается недостаток опыта.... задача вообще тривиальная - нужно найти место где введенные данные (7 чисел) сравниваются с заданными и подсмотреть последние..... происходит это так... по адресу 051С находится функция, которая последовательно запрашивает семь строк, а потом задает вопрос "данные верны?" и ждет нажатия enter... после чего - программа всплывает на функции в 0568, если войти в которую выдается сообщение "пароль неверный" а по нажатию enter программа всплывает на следующей строке - 058B с которой уже все повторяется.... ввиду описанного я пытаюсь ловить сравнения на промежутке между 051С (каллит функцию ввода данных на 3D41) и 058B (уже после проверки и вердикта)..... пытался установить функцию в которой это происходит или даже искать нужный cmp...х(... проблема осложняется тем, что данные перед сравненим могут быть преобразованы (только нафига?..)... думал в других отладчиках код попонятнее представлен (как в Олли или в ИДЕ)... или есть функция логирования каждого шага (можно было бы прогнать весь этот момент а потом анализировать распечатки).... или функция "бежать до сравнения заданных значений"... но такого я в ТД не нашел...... а функция "Exec to Ret" по-моему вообще не работает :\... помогите пожалуйста - дайте наметку, как лучше справить с этой задачей ??.... |
|
Создано: 27 февраля 2005 21:42 · Личное сообщение · #17 |
|
Создано: 27 февраля 2005 21:43 · Личное сообщение · #18 есть некоторые успехи...... seg001:051C call dword ptr [di+1Ch] эта функция соответстует вводу значений seg001:051F mov [bp+var_1], al seg001:0522 call @ClrScr$qv ; ClrScr(void) это очистка экрана, не рассматриваем seg001:0527 cmp [bp+var_1], 0 seg001:052B jz loc_10BCD здесь сравниваются два ноля. попробовал сбросить Zв итоге программа сказала "ок. пароль верный."... значит можно сделать вывод что сравнение находится в функции по адресу 3D41... |
|
Создано: 27 февраля 2005 21:46 · Личное сообщение · #19 |
|
Создано: 27 февраля 2005 22:06 · Личное сообщение · #20 |
|
Создано: 27 февраля 2005 23:01 · Личное сообщение · #21 порядок такой... запускаешь... три раза эникей... выбираешь фамилию (например Менделеев ;)...энтер... выбираешь задание (должно быть из группы R или K)... энтер... на вопрос о правильности - да.. энетр... второй пункт - "проверка результатов"... энтер... последовательно вводишь семь значений.... на вопрос "есть ли еще член" - нет... энтер... и тут он говорит резолюцию - ОТВЕТ НЕВЕРНЫЙ!.... нужно узнать - какие числа в него вводить чтобы получить верный ответ.... разумеется - чтобы можно было установить для любой другой фамилии... а вообще - идеально было бы чтобы он не спрашивал ответы, а называл их ;)... но с моими знаниями ассемблера - остается только мечтать об этом... a694_ostudnt.zip |
|
Создано: 27 февраля 2005 23:12 · Поправил: JsK · Личное сообщение · #22 все сводится к тому, что функция которую мы запрашиваем на 051С должна вернуть TRUE.... исследуемый участок (внутри этой функции, начинающейся на 3D41) - от 3F39 (ввода первых данных, по-видимому массива), до 41B8 (нажатия кнопки "НЕТ" после которой логичнее всего должно находиться сравнение с правильным вариантом) и до 4219 - точки возврата.... |
|
Создано: 27 февраля 2005 23:31 · Личное сообщение · #23 |
|
Создано: 28 февраля 2005 00:11 · Личное сообщение · #24 |
|
Создано: 28 февраля 2005 00:15 · Личное сообщение · #25 |
|
Создано: 28 февраля 2005 01:23 · Личное сообщение · #26 |
|
Создано: 28 февраля 2005 07:20 · Личное сообщение · #27 |
|
Создано: 28 февраля 2005 18:11 · Личное сообщение · #28 |
|
Создано: 28 февраля 2005 18:56 · Личное сообщение · #29 а что непосредственно перед запуском выдает mem ?... должно быть не меньше вышеназванной суммы.... (?) а вообще - существует ли отладчик позволяющий логгировать все выполняемые команды (ну или хотя бы адреса)... можно было бы распечатать кусок файла с наиболе вероятным местом проверки.... даже сравнить с ответами одного решенного варианта..... |
eXeL@B —› Основной форум —› Olly (Unknown Command) |