@PaulZhuvagin

Кто-нибудь знает толковый/любой обозреватель исходных файлов?

Всем доброго времени суток.
Перехожу с C# на C++. Столкнулся со следующей проблемой: в VS 2015 для .Net есть IL Viewer - я могу посмотреть структуру типов внутри динамической библиотеки (классы, типы, методы, параметры и т.д.), так вот дико не хватает подобного инструмента для С++. Обозреватель объектов выдает структуру только по моему проекту, а мне нужна структура системных библиотек. Цель: так как на С++ написано уже уйма кода, то и библиотек соответственно написано выше головы и я могу одну и ту же задачу решить разными способами: к примеру, вывод в консоль я могу сделать и через cout и через printf, прочитать символ могу тремя разными способами - cin, getch(), _getch() (то есть существуют еще и POSIX совместимые библиотеки). Собственно вопрос: подскажите тулзу, которая могла бы мне по исходному файлу (h, cpp) построить древовидную структуру по аналогии с Обозревателем объектов в VS 2015 ?
P.S. пробовал гуглить - не справился((( видимо некорректно задаю ключевые слова - поэтому сильно не ругайтесь, если тема окажется заезженной
P.P.S. по хорошему нужны два обозревателя - для файлов исходных кодов и для файлов динамических библиотек (тех же DLL к примеру)
  • Вопрос задан
  • 360 просмотров
Пригласить эксперта
Ответы на вопрос 4
TrueBers
@TrueBers
Гуглю за еду
В плюсах не так всё просто, как в дотнете. Стандартных возможностей для этого не существует в природе. Си и С++ по сути являются высокоуровневым ассемблером без какой-либо метаинформации. Здесь всё зависит от наличия отладочной информации в файле. Если её нет, то вы увидите только ассемблерный код. Максимум сможете только найти строки, которые использует программа. Но даже с отладочной инфой вы не получите ни имён, ни переменных, ни классов. Будут абстрактные наборы процедур, которые, при наличии опыта реверсинга можно будет определять на глаз.

При этом, в плюсах можно статически компилировать. И этот статический код вы никак не сможете отделить от вашего. Можно, например, скомпилировать хеллоу ворлд на 30 мегабайт на каком-нить фреймворке, и из них вашего кода будет только несколько десятков байт. Существуют, конечно, всякие сигнатурщики, костыли, но они работают только в идеальных вакуумно-сферических программах, которых не бывает. Обычно такое реверсеры пишут чисто для себя, не выкладывая в паблик.

А вообще, после перехода с дотнета просто смиритесь, что вы пишете, по сути, на ассемблере с синтаксическим сахаром, и что в плюсах разработка гораздо дольше, затратнее и сложнее с непривычки.
Ответ написан
Rou1997
@Rou1997
Для бинарных файлов два варианта. Первый, дизассемблер IDA Pro, очень "тяжелый", зато найдет все, что есть, в том числе "покажет" ассемблерный код, и попытается декомпилировать встроенным декомпилятором Hex-Rays, который является лучшим декомпилятором нативного кода, выдающим C/C++. Второй, Dependency Walker, "легкая" утилита, но покажет только сами имена функций, и не декодирует "декорации".
Пишу сам подобную утилиту для ELF (Linux, Android), которая позволит не только смотреть библиотеки (да и приложения тоже), но и редактировать их - например, для локализации, но не только.
Ответ написан
@res2001
Developer, ex-admin
По исходникам любая IDE в своем менеджере проектов умеет показывать дерево объектов, функций, типов. Та же студия, например.
Ответ написан
@PaulZhuvagin Автор вопроса
Решение почти найдено:
1. в проектах Visual C++ этот обозреватель находится в Обозревателе решений. Нужно развернуть узел Внешние зависимости (не удачный UX, на мой взгляд, так как для проектов Visual C# это отдельное окно Обозреватель объектов);
2. в узле Внешние зависимости не показаны унаследованные типы (классы-родители, унаследованные поля и методы и т.д. (как вы можете догадаться, в случае с проектом Visual C# ситуация обстоит иначе).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы