Можно ли в ида где-то сбоку хранить реконструкцию исходного кода? Занялся я тут недавно реконструированием одной программы (и реконструированием вообще) и столкнулся с тем, что очень неудобно "восстановленные" исходники хранить отдельно от дизасма. Т.е. сейчас я создаю файл, что-то типа 004ABDC0_readFrom.cpp, в который пишу реинженернутый код, но т.к. постоянно появляется новая информация о типах, структурах и т.п. то получается нужно заново проходиться по файлам и их обновлять. Вот хотелось бы узнать, можно ли этот восстановленный код как-то привязывать к дизасму? В идеале, чтобы получилось что-то похожее на source+disasm в отладчиках В худшем случае, чтобы просто глядя на дизасм функции можно было бы легко перейти к её сишному представлению и подредактировать/подсмотреть.
Зачем мне декомпилятор? Я сам восстанавливаю код, но, к сожалению, пока что приходится его писать в отдельные файлы. Hexrays создаёт readonly текст, который править нельзя. Во всяком случае я не нашёл как.
Это да, уже заметил. Даже освоил __usercall Но всё же, вопрос остаётся открытым: можно ли своё что-то подписывать/дописывать?
dv66 Кроме комментариев ничего в Иду нужного не допишешь. Это не относится к структурам (классам, объединениям) и перечислениям. Могу поделиться опытом по реверсингу, т.к. более 10 лет занимаюсь этой проблемой и мной восстановлено порядка 10 исходников программ разной степени сложности, включая и современные игровые графические движки. 1. Определяем на каком языке и какими средствами создана программа. Восстановливаем исходники (отлаживаем) только на этом языке и этими же средствами. Предположим, это VS6 MFC, далее по тексту просто VS. 2. Пишем исходники (по мере разбора в Ида) напрямую в VS, предварительно создав нужный тип проекта. 3. Для частичной отладки некоторых функций делаем "заглушки" и ставим их на неполностью восстановленные функции (что-то пока непонятно) или на вызовы ненаписанных функций. Заглушка представляет из себя что-то следующее Код (Text): MessageBox(GetFocus(), "zCFont::AnalyseLetters not full", "Error-Message", 0x40000); exit(1); В обычных случаях работает, в сложных сучаях (в исключениях, некоторых потоках) легко модифицируется к нужному виду. Основное назначение - запрет выполнения или пропуск кода, который ещё не написан и извещение о том, какую функцию надо восстанавливать дальше для продолжения отладки. И таким робразом, шаг за шагом, идем до конца. Да, классы добавляем (расширяем) в Ида и параллельно в исходниках, имена членам классов на этом этапе советую давать такие xx134, где xx - может быть любой буквой, какая нравится (я выбрал - s), а 134 - смещение члена от начала класса в hex. В дальнейшем такие имена заменяются на осмысленные. Таким образом, даже не зная алгоритма программы, можно полностью получить на неё исходники. Написали (восстановили) пару функций - отладили до заглушки, написали ещё пару - отладили до заглушки и т.д. до тех пор пока не останется заглушек и прога нормально не заработает.
Vam Большое спасибо, видимо я был на правильном пути Только я файлы не добавлял в проект, но теперь так и сделаю, т.к. их количество растёт, как на дрожжах и навигация затрудняется.