[gcc] Спасение идиота или восстановить исходный код
Сомневаюсь что там есть собственно код. Попробуй помурыжить объектники readelf --debug-dump=<>
Собранная с отладочными символами. Насколько я понимаю, при этом в .so-файле сохраняется чуть ли не весь исходный код.отладочные символы - это лишь набор пар вида: позиция в бинарнике - позиция в исходниках(файл, номер строки, номер колонки)
Нет, конечно же там больше информации. Как минимум описываются локальные переменные и что с ними происходит при входе/выходе из фрейма стека.
Нет, конечно же там больше информации. Как минимум описываются локальные переменные и что с ними происходит при входе/выходе из фрейма стека.соглашусь, что еще есть список пар функция+название локальной переменной - смещение на стеке
что с ними происходит при входе/выходе из фрейма стекаэто что такое? и зачем надо?
зы
плюс еще декларация классов/структур: название поля/метода - смещение
Так получилось, что меня *внезапно* покинул весь каталог с исходным кодом библиотеки, но у меня осталась сама собранная библиотека.работает хоть?
А много ли файлов и большие ли они? Может undelete попытаться навести? Что за ФС?
Есть такая штука как CFI - описание того как размотать стек в любой момент времени. Нужна когда нет фреймпоинтеров. Там out-of-code описывается где начинается следующий фрейм исходя из значений регистров.
Там out-of-code описывается где начинается следующий фрейм исходя из значений регистров.вроде достаточно соответствия между значением ip-а и информацией на какую глубину уже инициализированы локальные переменные
исходя из значений регистровпоясни, пожалуйста, это
работает хоть?Работает. Проблема в том, что надо улучшить
А много ли файлов и большие ли они? Может undelete попытаться навести? Что за ФС?
Файлов там всего штук пять, просто очень не хочется заново разбираться в апи, для которого я писал один раз и уже всё забыл. На андилит шансов нет — перед тем, как полезть искать код, я целый день по несколько раз забивал диск в ноль различными многогиговыми дампами, так что там уже всё перетёрлось
Там для каждого фрейма можно указать начало предыдущего фрейма (в виде регистр + смещение которое может быть разным для разных областей в коде, плюс куда были сохранены значения регистров из предыдущего фрейма (в другой регистр, или в память по адресу "регистр + смещение"). Это позволяет отладчику отмотать несколько фреймов стека и сказать какие значения там были у локальных переменных. Если повезет.
плюс куда были сохранены значения регистров из предыдущего фрейма (в другой регистр, или в память по адресу "регистр + смещение").вот это понятно. спасибо
а в сях от бинарников можно наследование строить?
если есть хедеры то можно
Теперь делаю и бэкап файлы в отдельный каталог, надо ещё автоматическое версионирование к ним прикрутить
Теперь делаю и бэкап файлы в отдельный каталог,на почту себе лучше отправь
на почту себе лучше отправьА если интернета нет?)
Пока что обошёлся сохранением бэкап файлов в отдельный базар.
В общем, либа меня не спасла, спасли вимовские анду-файлы и люди из рассылки вимаЕсли не делать автоматическое резервное копирование раз в сутки, то централизованные VCS тащат.
Теперь делаю и бэкап файлы в отдельный каталог, надо ещё автоматическое версионирование к ним прикрутить
Ну или если и бэкапы лень настраивать, и VCS, то работать в директории Dropbox, хоть что-то было бы.
Оставить комментарий
doublemother
Так получилось, что меня *внезапно* покинул весь каталог с исходным кодом библиотеки, но у меня осталась сама собранная библиотека. Собранная с отладочными символами. Насколько я понимаю, при этом в .so-файле сохраняется чуть ли не весь исходный код. Есть ли у меня какая-то возможность его оттуда изъять?P.s. .o-файлы у меня, благодаря out-of-tree сборке, тоже сохранились, если это мне хоть как-то поможет.