Есть ли способ получить статически связанные функции, содержащиеся в.exe, и использовать их повторно?

Например:

Скажи, что я связал myprogram.obj с myprogram.lib делать myprogam.exe

Если myprogram.lib в нем содержались всевозможные специальные функции, и я случайно удалил его (и источник), есть ли способ, которым я мог бы покопаться в myprogram.exe и получить функции? Или, может быть, даже просто конвертировать myprogram.exe к .lib файл как-то и только ссылаться на части, которые мне нужны?

3 ответа

Большинство компиляторов оптимизируют код, удаляя неиспользуемые функции. если вы не использовали каждый фрагмент библиотеки или не позаботились о том, чтобы компилятор не оптимизировал неиспользуемые функции, маловероятно, что ваш файл lib будет полностью включен в исполняемый файл.

Функции там. Если исполняемый файл не зашифрован или иным образом не может быть разобран до прямого ассемблерного кода (exepackers, шифрование, ключи), вы можете найти функции.

Но их названия, точные границы и другие аннотации исчезли, что затрудняет автоматизацию, так как больше нет ничего, чтобы идентифицировать функции.

Другими словами, это что-то для мастера ассемблера или для профессиональных сервисов реверс-инжиниринга.

Если ваш код очень полезен, а ваш компилятор относительно распространен, существуют службы обратного инжиниринга, которые могут сделать это за вас. Но будьте готовы к огромной цене. Даже просто анализ того, как легко это будет, может быть дорогим. (*)

В большинстве ситуаций цена извлечения (либо вашего собственного времени, либо наемного) превышает стоимость функций, и их дешевле переписать

(*) RTTI или внутренняя отладочная информация могут сделать это проще.

Так вот в чем дело. Вы, вероятно, можете "декомпилировать" свой исполняемый файл. Это боль. Но если вам нужна вся информация по этому вопросу, посмотрите на этот более ранний вопрос.

Другие вопросы по тегам