[gcc] Спасение идиота или восстановить исходный код

doublemother

Так получилось, что меня *внезапно* покинул весь каталог с исходным кодом библиотеки, но у меня осталась сама собранная библиотека. Собранная с отладочными символами. Насколько я понимаю, при этом в .so-файле сохраняется чуть ли не весь исходный код. Есть ли у меня какая-то возможность его оттуда изъять?
P.s. .o-файлы у меня, благодаря out-of-tree сборке, тоже сохранились, если это мне хоть как-то поможет.

ppplva

Сомневаюсь что там есть собственно код. Попробуй помурыжить объектники readelf --debug-dump=<>

Dasar

Собранная с отладочными символами. Насколько я понимаю, при этом в .so-файле сохраняется чуть ли не весь исходный код.
отладочные символы - это лишь набор пар вида: позиция в бинарнике - позиция в исходниках(файл, номер строки, номер колонки)

ppplva

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

Dasar

Нет, конечно же там больше информации. Как минимум описываются локальные переменные и что с ними происходит при входе/выходе из фрейма стека.
соглашусь, что еще есть список пар функция+название локальной переменной - смещение на стеке
что с ними происходит при входе/выходе из фрейма стека
это что такое? и зачем надо?
зы
плюс еще декларация классов/структур: название поля/метода - смещение

Serab

Так получилось, что меня *внезапно* покинул весь каталог с исходным кодом библиотеки, но у меня осталась сама собранная библиотека.
работает хоть? :grin:
А много ли файлов и большие ли они? Может undelete попытаться навести? Что за ФС?

ppplva

Есть такая штука как CFI - описание того как размотать стек в любой момент времени. Нужна когда нет фреймпоинтеров. Там out-of-code описывается где начинается следующий фрейм исходя из значений регистров.

Dasar

Там out-of-code описывается где начинается следующий фрейм исходя из значений регистров.
вроде достаточно соответствия между значением ip-а и информацией на какую глубину уже инициализированы локальные переменные
исходя из значений регистров
поясни, пожалуйста, это

doublemother

работает хоть? :grin:
А много ли файлов и большие ли они? Может undelete попытаться навести? Что за ФС?
Работает. Проблема в том, что надо улучшить :)
Файлов там всего штук пять, просто очень не хочется заново разбираться в апи, для которого я писал один раз и уже всё забыл. На андилит шансов нет — перед тем, как полезть искать код, я целый день по несколько раз забивал диск в ноль различными многогиговыми дампами, так что там уже всё перетёрлось :(

ppplva

Там для каждого фрейма можно указать начало предыдущего фрейма (в виде регистр + смещение которое может быть разным для разных областей в коде, плюс куда были сохранены значения регистров из предыдущего фрейма (в другой регистр, или в память по адресу "регистр + смещение"). Это позволяет отладчику отмотать несколько фреймов стека и сказать какие значения там были у локальных переменных. Если повезет.

Dasar

плюс куда были сохранены значения регистров из предыдущего фрейма (в другой регистр, или в память по адресу "регистр + смещение").
вот это понятно. спасибо

kill-still

бывает так что его и никогда и небыло, а надо улучшить. :grin:
а в сях от бинарников можно наследование строить?

elenangel

если есть хедеры то можно

doublemother

В общем, либа меня не спасла, спасли вимовские анду-файлы и люди из рассылки вима :)
Теперь делаю и бэкап файлы в отдельный каталог, надо ещё автоматическое версионирование к ним прикрутить :)

lubanj

Теперь делаю и бэкап файлы в отдельный каталог,
на почту себе лучше отправь ;)

doublemother

на почту себе лучше отправь ;)
А если интернета нет?)
Пока что обошёлся сохранением бэкап файлов в отдельный базар.

tinych1

В общем, либа меня не спасла, спасли вимовские анду-файлы и люди из рассылки вима
Теперь делаю и бэкап файлы в отдельный каталог, надо ещё автоматическое версионирование к ним прикрутить
Если не делать автоматическое резервное копирование раз в сутки, то централизованные VCS тащат.
Ну или если и бэкапы лень настраивать, и VCS, то работать в директории Dropbox, хоть что-то было бы.
Оставить комментарий
Имя или ник:
Комментарий: