Как восстановить случайно перезаписанный исходный файл, используя объектный файл
Я по ошибке удалил содержимое моего исходного файла на Фортране командой, включающей ">":
some command > file.f
Я не использую контроль версий или что-нибудь. Тем не менее, есть объектный файл file.o, если это может помочь. Есть ли возможность восстановить содержимое файла.f?
2 ответа
Декомпиляция будет хорошо работать с языками байт-кода, такими как Java, которые более или менее "предназначены для этой цели".
С оптимизирующим компилятором, таким как Fortran (или C, или C++), вам почти не повезло.
Существуют инструменты, которые восстанавливают какой-то исходный файл (например, "бумеранг"), но он будет далеко от оригинала, и, как правило, это пустая трата времени, даже если он пытается.
Учитывая характер процесса компиляции, часто даже невозможно отменить операцию. Не только информация, такая как имена переменных или имена не экспортируемых функций (и, конечно, комментарии), отбрасывается и константы заменяются магическими числами, но также и скомпилированная программа может иметь совершенно другую структуру, чем код, который вы написали.
Компиляторы регулярно выполняют оптимизации, такие как перемещение инвариантов из циклов, перестановка операторов или определение общих подвыражений (даже если оптимизация явно не включена, большинство компиляторов в любом случае выполняют тривиальные оптимизации).
Компилятор должен генерировать что-то, что ведет себя "как будто", как это наблюдается извне, но не то, что обязательно эквивалентно написанному вами исходному коду.
Подобное явление существует при переходе через программу в отладчике. Иногда, переменные не могут быть просмотрены, или вы не можете разбить на определенную строку, и целые операторы, по-видимому, просто "уйдут" к удивлению неосведомленного разработчика, потому что компилятор оптимизировал их.
Таким образом, единственный лучший совет, который я могу дать, как бы это ни было бесполезно, - это признать, что вы сделали что-то глупое, переписать исходный файл с нуля и начать использовать систему контроля версий сейчас.
Могут быть инструменты декомпилятора, которые могут генерировать исходный код Fortran из скомпилированного объектного кода, но это не оригинальный исходный код: такие вещи, как комментарии и имена локальных переменных, отбрасываются в процессе компиляции и отсутствуют в объектном файле, поэтому они могут: быть восстановленным. Структура декомпилированного кода, вероятно, также будет отличаться, особенно если объектный файл был скомпилирован с оптимизацией.
К сожалению, вы не получите свой исходный код из объектного файла.