Как пользоваться отладчиком OllyDbg?

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 14:25

Поскольку в тематическом разделе я, кажется, уже задолбал всех своими попытками перехватить в ИДЕ команду End, спрошу здесь :)

Вопрос такой: как отладчиком поймать момент, когда в бейсике происходит выполнение этой команды, и посмотреть, что именно при этом происходит?

Предполагаю, что при этом вызывается какая-то функция из vba6.dll

(Мануалы по OllyDbg у меня - есть :)
Артур
 
   

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Joo » 04.07.2009 (Сб) 17:20

arthur2 писал(а):Поскольку в тематическом разделе я, кажется, уже задолбал всех своими попытками перехватить в ИДЕ команду End, спрошу здесь :)

Вопрос такой: как отладчиком поймать момент, когда в бейсике происходит выполнение этой команды, и посмотреть, что именно при этом происходит?

Предполагаю, что при этом вызывается какая-то функция из vba6.dll

(Мануалы по OllyDbg у меня - есть :)


Когда узнаешь, что с этим будешь делать?
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 18:18

Допишу вот это:
viewtopic.php?f=51&t=39461

Собственно, об энде я узнаю :) Но слишком поздно - уже после того, как он запущен. Так что мне удаётся только помахать ручкой вослед. Могу дать возможность сохранить проект при необходимости, но предотвратить выгрузку бейсика - уже не получается.

Другое дело, если я научусь снимать субклассинг ПЕРЕД ендом.
Артур
 
   

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Joo » 04.07.2009 (Сб) 18:22

arthur2 писал(а):Допишу вот это:
viewtopic.php?f=51&t=39461

Собственно, об энде я узнаю :) Но слишком поздно - уже после того, как он запущен. Так что мне удаётся только помахать ручкой вослед. Могу дать возможность сохранить проект при необходимости, но предотвратить выгрузку бейсика - уже не получается.

Другое дело, если я научусь снимать субклассинг ПЕРЕД ендом.


Для этого тебе нужно узнавать это из тела программы, только ИМХО это не стоит свеч. Гораздо проще завершать программу не кнопкой Stop в среде, а так-же из тела программы.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 18:43

Ты не понял - я пишу библиотеку для отладки субклассинга. Предполагается, что меня никто спрашивать не будет, когда будет бымкать по стопу.

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

Joo писал(а):Для этого тебе нужно узнавать это из тела программы,
А откуда ещё это можно узнать? :shock:
Я могу поставить хук на ИДЕ (причём, это довольно просто - поток-то один и у проекта и у ИДЕ), но я не знаю, что этим хуком ловить :oops:
Артур
 
   

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как пользоваться отладчиком OllyDbg?

Сообщение iGrok » 04.07.2009 (Сб) 18:45

Joo писал(а):Гораздо проще завершать программу не кнопкой Stop в среде, а так-же из тела программы.


Угу. И это надо будет объяснять пользователям. "Вот сюда не нажимайте, пожалуйста. И вот сюда - тоже. Ага, спасибо. Вы всё-таки нажали? Ну не беда, сейчас мы тут позакрываемся маленько, потом проектик заново откроем... Да Вы сидите, сидите..."
label:
cli
jmp label

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Joo » 04.07.2009 (Сб) 18:53

iGrok писал(а):Угу. И это надо будет объяснять пользователям. "Вот сюда не нажимайте, пожалуйста. И вот сюда - тоже. Ага, спасибо. Вы всё-таки нажали? Ну не беда, сейчас мы тут позакрываемся маленько, потом проектик заново откроем... Да Вы сидите, сидите..."


Пользователи твоих программ запускают их под IDE??? Я в шоке. Речь же идет об остановки программы из IDE (кнопка Stop), и способе узнать это во время отладки программы. Во время использования программы с остановкой сабклассинга проблем нет.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 18:59

iGrok
Ага Изображение
К тому же - как перезапустить проект, мне выяснить так и не удалось :oops:

Joo писал(а):Пользователи твоих программ запускают их под IDE???
А в чём шок? Именно так :) Если пользователь - тот, кто занимается этой самой отладкой. Ты же например - тоже пользователь бейсика и ИДЕ.
Артур
 
   

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Joo » 04.07.2009 (Сб) 19:03

arthur2 писал(а):iGrok
Ага Изображение
К тому же - как перезапустить проект, мне выяснить так и не удалось :oops:

Joo писал(а):Пользователи твоих программ запускают их под IDE???
А в чём шок? Именно так :) Если пользователь - тот, кто занимается этой самой отладкой. Ты же например - тоже пользователь бейсика и ИДЕ.


В том что он имел ввиду не тех пользователей! А тот кто занимается отладкой есть программист. Он же пользователь IDE. Он же разработчик программы. IGrok говорил не о разработчике, а о пользователе.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 19:09

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Хакер » 04.07.2009 (Сб) 19:54

В чём суть отладки субклассинга?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 20:31

не понял вопроса :oops:
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Хакер » 04.07.2009 (Сб) 20:33

Ты пишешь библиотеку для отладки субклассинга? Я не знаю, что такое «отладка субклассинга». Объясни мне, что это, и, соответственно, для чего библиотека, которую ты пишешь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Joo » 04.07.2009 (Сб) 20:52

Хакер писал(а): Я не знаю, что такое «отладка субклассинга». Объясни мне, что это, и, соответственно, для чего библиотека, которую ты пишешь.


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

Всё, молчу.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как пользоваться отладчиком OllyDbg?

Сообщение iGrok » 04.07.2009 (Сб) 20:55

Joo писал(а):iGrok говорил не о разработчике, а о пользователе.

Быть может, ты не будешь додумывать за меня, чего я говорил?
Я имел в виду именно разработчика, как пользователя адд-инов IDE.

Хакер писал(а):Ты пишешь библиотеку для отладки субклассинга? Я не знаю, что такое «отладка субклассинга». Объясни мне, что это, и, соответственно, для чего библиотека, которую ты пишешь.

Ну если я правильно понимаю, суть в том, чтобы можно было спокойно отлаживать программы, в которых присутствует сабклассинг, не опасаясь, что IDE рухнет в самый неподходящий момент из-за того, что, к примеру у тебя повис какой-то цикл, и его можно завершить только End'ом, ибо при включенном сабклассинге в режиме пошагового выполнения код в IDE, как и порядок его выполнения, менять не получается.
label:
cli
jmp label

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 21:01

Хакер Мне нужно, чтобы в проекте, в котором есть субклассинг, можно было делать все те же вещи, которые можно делать в обычном проекте: ставить бряки, проходить код пошагово, останавливать проект кнопкой стоп.

Чтобы это реализовать, я использую условную компиляцию. Если дело происходит в готовой программе, то адрес winproc я получаю обычным addressof. Если же в проекте - то вместо addressof я использую подставную функцию из внешней библиотеки, которая возвращает адрес своей winproc:
Код: Выделить всё
Function winProc(ляляля) As Long
    Select Case EbMode
    Case 1 'IDE в режиме запуска
          пересылаем всё обратно в проект, ни чего не меняя
    Case 2 'IDE в режиме паузы
         вызываю DefWindowProc
    Case Else 'case 0' нас остaновили эндом
         пытаюсь снять субклассинг. Он нормально снимается. Но бейсик всё равно вываливается
    End Select
End Function


Вот этот последний пункт и не получается
Обсуждали здесь:
viewtopic.php?f=51&t=39461
и несколько продуктивней здесь:
http://forum.sources.ru/index.php?showt ... &p=2256678
Единственное, что получилось сделать - дать возможность сохранить-таки проект перед тем, как бейсик всё равно выгрузится.

iGrok Всё правильно :) Но:
ибо при включенном сабклассинге в режиме пошагового выполнения код в IDE, как и порядок его выполнения, менять не получается.
при моём подходе - вполне получается! Вообще - практически ни каких неудобств, кроме невозможности энда
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Хакер » 04.07.2009 (Сб) 21:45

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

А почему их нельзя делать, когда есть сабклассинг?

А зачем отлавливать момент энда? Чтобы предпринять что?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 04.07.2009 (Сб) 21:55

Потому что, если ты начинаешь пошагово выполнять код, а субклассинг продолжает работать и, например, обрабатывать paint, всё моментально виснет.

Хакер писал(а):А зачем отлавливать момент энда? Чтобы предпринять что?
если энд УЖЕ начался выполняться, то, насколько я понял, ничего сделать нельзя: чтобы я ни делал, программа вернётся в процедуру, внутри которой был энд, а этой процедуры уже нету... Если конечно я правильно понимаю. Поэтому снятие субклассинга в моём варианте - ничего не даёт

Но если снять субклассинг ДО начала выполнения энда, то должно всё получиться... по крайней мере, мне хочется на это надеяться
Артур
 
   

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 05.07.2009 (Вс) 21:49

Интересно, что по вопросу, вынесенному в заголовок никто не сказал вообще ничего :) Я конечно понимаю, что раздел такой, но всё-таки :alien:
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Хакер » 05.07.2009 (Вс) 21:57

Потому что вопрос из разряда «Как пользоваться руками».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 05.07.2009 (Вс) 22:01

ну да - раз уж они кривые
Артур
 
   

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Joo » 06.07.2009 (Пн) 13:46

arthur2 писал(а):Интересно, что по вопросу, вынесенному в заголовок никто не сказал вообще ничего :) Я конечно понимаю, что раздел такой, но всё-таки :alien:


Тебе дорога на wasm.ru, я там нужную инфу беру
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 06.07.2009 (Пн) 15:21

Да я там был :) И мануал очень даже толковый скачал. Но на изучение и понимание всего этого хозяйства нужен не один месяц, и желательно, чтобы с преподом...

А у меня вполне конкретная маленькая задачка, и, как мне кажется, не очень сложная для тех, кто понимает. Вот я и взываю: натолкните на то, хотя бы, как сделать, чтобы отладчик остановился именно тогда, когда ИДЕ вызывает энд :)
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Хакер » 06.07.2009 (Пн) 15:33

Ну это бредовый вопрос. IDE вызывает End? А я думал, твоя программа вызывает End.

И что значит там? Что значит вызывает End? Думаешь есть конкретная функция (что-то вроде __vbaEnd). А если нет функции? То где надо остановиться?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 06.07.2009 (Пн) 16:44

Мне кажется, что энд под ИДЕ и энд в экзешнике - две большие разницы... И энд в дизайнере, скорее всего, вызывается-таки какой-то функцией...
Хакер писал(а):А если нет функции? То где надо остановиться?
ну какой-то же код всё-таки есть. Остановиться - перед ним :)

Хотя вполне допускаю, что долблюсь не в ту дверь.
Артур
 
   

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Как пользоваться отладчиком OllyDbg?

Сообщение SLIM » 06.07.2009 (Пн) 18:43

Просто видишь ли в чем дело.
На низком уровне все намного проще чем на боле высоком. Там ф-й всего ничего. Возврат из ф-ии например происходит после ret-а. Представляешь сколько ret-ов в программе- несчетное количество. Как ты определишь нужную?
А вообще, запускаешь в Ole программу и выполняешь пошагово. Где-то должно быть место где она выгружается. Тут я думаю нужно очень неплохо полопатить asm, так как программа, которая выполняется в IDE и программа которая в формате PE - две разные вещи.

Ну я так думаю по крайней мере
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Хакер » 06.07.2009 (Пн) 19:19

Под IDE программа Пи-кодная и её не поотлаживаешь (нормально) в x86-отладчике.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 06.07.2009 (Пн) 19:55

То есть, безнадёга? Обидно :(

Ну а какая-нибудь другая идея? Как добиться, чтобы бейсик не падал от энда в субклассинге? Ведь как-то же можно! У меня есть такой пример - правда, там ассемблерная вставка.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как пользоваться отладчиком OllyDbg?

Сообщение Хакер » 06.07.2009 (Пн) 20:27

Чем тебя не устраивает вариант со вставками? Он намного проще, чем твои хитрые замыслы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как пользоваться отладчиком OllyDbg?

Сообщение arthur2 » 06.07.2009 (Пн) 21:12

Есть вариант от ANDLL-а - он падает точно так же и точно при тех же обстоятельствах и, судя по его словам, точно от того же, что и мой с хитрым замыслом:
http://forum.sources.ru/index.php?showt ... &p=2256678
Есть вариант, который лежит в той же теме в моём последнем топике - он при том же раскладе не падает.

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

Я же хочу реализовать субклассинг по-своему. Хочу сам выстраивать его логику.

При моём подходе код самого субклассинга может быть организован как угодно. Отличия в коде релиза и отладочном коде будет только в одной строке:

Код: Выделить всё
#If DEBUGING = 1 Then
      setSbcls = SetWindowLong(hwnd, GWL_WNDPROC, AdrOfDbg(AddressOf winProc))
#Else
    setSbcls = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf winProc)
#End If

То есть, я просто заменяю AddressOf на AdrOfDbg.

Эту мою AdrOfDbg можно прикрутить, совершенно не меняя ни кода, ни его логики, к ЛЮБОМУ примеру на бейсике с субклассингом: хоть к классическому иллюстративному примеру, хоть к классу GSerg-a, хоть к примерам создания окон без форм, хоть к вызовам диалогов открытия файлов...

К тому же - ты будешь смеяться, но отлаживать субклассинг ни в одном из этих примеров нельзя так же просто, как у меня. Я ставлю бряки хоть внутри winproc, и при этом не боюсь ненароком задеть окно программы, чтобы на меня не посыпались wm_paint-ы

Собственно, если бы я мог реализовать эту же идею в ассемблерной вставке, я бы так и сделал.
Артур
 
   

След.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

    TopList  
cron