Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ваши методы разбора


Автор: Rickert 24.5.2007, 08:42
Расскажите о том, как вы разбираете чужой исходный код. Может быть у кого есть интересные приёмы?

Имеется ввиду разбор не программ типа hello world, а больших проектов.

Автор: W4FhLF 24.5.2007, 09:00
Rickert, здесь подход стандартный. 
Я в качестве отладчика ring3 кода использую OllyDBG со своим набором плагинов, настроек и других особенностей(в том числе использую плагин для подключения сигнатур из ИДЫ). Ольга поддерживает отладочную информацию, так, что я её ещё использую и вместо стандартного отладчика MS VS.
В качестве дизассемблера ессно ИДА, тут тебе и символы, и сигнатуры и отладочная инфа и вообще самый умный движок, короче не знаю, что тут описывать, де факто просто smile
В качестве отладчика ring0 и драйверов раньше использовал WinDBG, реже SoftICE(ибо глючил, как только я с ним нен извращался), но WINDBG это конечно полный атас в плане юзабилити, что-то путём отладить надо сначала через задний проход подлезть.
Сейчас обороты набирает другой отладчик- Syser Debugger. Ещё немного сыроват, я слежу за ним с версии 1.2, последняя 1.9, уже есть поддержка символов и многих других особенностей(http://sysersoft.com/products.htm), очень перспективная разработка, вся надежда на неё. 

Автор: Rickert 24.5.2007, 09:06
Я не про бинарник, а про исходник сам. smile

Автор: archimed7592 24.5.2007, 09:09
W4FhLF, может я слепой, но речь, вроде про исходный код была smile 

Rickert, у больших проектов, как правило, есть какая-никакая документация... имхо, с неё начинать нужно...

Автор: W4FhLF 24.5.2007, 09:16
Опа, палюсь smile

Автор: korbian 24.5.2007, 09:18
Цитата(Rickert @  24.5.2007,  09:42 Найти цитируемый пост)
как вы разбираете чужой исходный код

с интерфейсов, до низу.
если нет документации на исходник, беру листочек, карандашек и рисую диаграммки.
Оооочень редко, через Visio получаю class diagram.

Автор: Rickert 24.5.2007, 09:36
Я стараюсь найти основную функцию, так скзать "корень" от которого всё идёт и потом, от него наинаю рассматривать каждую строку одну за другой, появляются функции различные, тут же, при встрече, рассматриваю их. Так сказать выращиваю логическое дерево связей у себя в голове.

Автор: dumb 24.5.2007, 10:49
для разбора чужих исходников сначала пытаюсь найти "корень зла", то бишь того падонка(ов), который эту муть(редко... редко чужой код радует глаз) написал - при помощи подручных средств можно в сжатые сроки вытянуть из него(них) смысл написанного. в случае, если падонков многовато(team), то лучше отлавливать их по одному. если поиск закончился неудачей, то очень помогает методика "не накапливай в себе, выражайся крепче"... smile главное забыть про поговорку "в чужом глазу соринку..." - мешает сосредоточиться и выражаться.

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

ps. это кофе вштырило... smile

Цитата(Rickert @  24.5.2007,  09:36 Найти цитируемый пост)
Так сказать выращиваю логическое дерево связей у себя в голове. 

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

Автор: FiMa1 24.5.2007, 10:49
А есть ли программы для разбора отдельных сложно-составных выражений в коде?
В целом же, в большом проекте, не плохо использовать продукты Source Insight, JGrasp, отличное подспорье при разборе кода, имхо. Кроме того, на выручку приходят системы контроля версий ПО.

Автор: v_nikolaev 24.5.2007, 10:56
Цитата(FiMa1 @ 24.5.2007,  10:49)
Кроме того, на выручку приходят системы контроля версий ПО.

ага, помогают понять, кто такую-то муть туда-то добавил smile

Автор: betal 24.5.2007, 11:43
методом втыка.
Но все же надеюсь что код написан ясно и чисто.... smile 

Автор: Rickert 24.5.2007, 12:24
betal, наивный smile 

Автор: Promitheus 24.5.2007, 13:58
Если смысл написанного не тривиален, то сначала пытаюсь откомпилить. Если не компилится  пытаюсь покопаться в настройках среды, если дело не в моей системе выкидываю исходник. Если же откомпилилась смотрю, что делает прога, хотя я примерно прдеставляю. Далее инициализации переменных при запуске окна, далее обработчики событий. Если тяжёлый случай, что пошаговая отладка с точками останова и наблюдение за содержимым переменных во время выполнения.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)