Дано:
1) *.so бинарник Б1, собранный 3ей стороной, без отладочных символов.
2) исходники этого бинарника, из которых мною собирается ПОЧТИ такой же бинарник Б2, с символами.
Проблема в том что отлаживать надо Б1 (без возможности его замены), а различия в символах усугубляется с ростом смещения внутри файла. В итоге gdb, загружая символы из Б2, показывает полную ересь. Хотя 90+% функций абсолютно идентичны, а у остальных изменения минимальны.
Есть ли готовый инструмент/скирпт, который подфиксит оффсеты в символах Б2, используя экспорты Б1 как реперные точки ?
Здравствуйте, IID, Вы писали:
IID>Проблема в том что отлаживать надо Б1 (без возможности его замены),
Может, я чего-то не догоняю, но в чем смысл отладки того, что заменить нельзя?
Или суть в том, что отлаживаемый бинарник должен быть собран именно таким образом и никак иначе?
Вроде бы есть возможность символы извлечь и сложить во внешний файл.
Здравствуйте, landerhigh, Вы писали:
L>Может, я чего-то не догоняю, но в чем смысл отладки того, что заменить нельзя?
Масса причин. Например он лежит в ROM, который не изменить.
L>Или суть в том, что отлаживаемый бинарник должен быть собран именно таким образом и никак иначе?
Не совсем суть, но да, это тоже важно.
Прим.: отладка не обязательно предполагает наличие проблемы в этом стороннем бинарнике. Иными словами — цель в самой возможности прошагать какую-то его функцию.
L>Вроде бы есть возможность символы извлечь и сложить во внешний файл.
Это ничего не даст. gdb и так прекрасно жрёт нематчащийся бинарник. Надо символы подфиксить.
Здравствуйте, IID, Вы писали:
L>>Или суть в том, что отлаживаемый бинарник должен быть собран именно таким образом и никак иначе?
IID>Не совсем суть, но да, это тоже важно. IID>Прим.: отладка не обязательно предполагает наличие проблемы в этом стороннем бинарнике. Иными словами — цель в самой возможности прошагать какую-то его функцию.
Отлавливаешь предполагаемй косяк вовне бинарника? А методом вынесения предположения и написания на основе него синтетичского теста никак?
Просто не могу представить необходимость именно пошаговой интерактивной отладки при доступе к исходникам.
IID>Это ничего не даст. gdb и так прекрасно жрёт нематчащийся бинарник. Надо символы подфиксить.
Собрать как требует процесс, символы вытащить наружу, залить бинарник в пзу. Должно сработать, разве нет?
Здравствуйте, landerhigh, Вы писали:
L>Отлавливаешь предполагаемй косяк вовне бинарника? А методом вынесения предположения и написания на основе него синтетичского теста никак? L>Просто не могу представить необходимость именно пошаговой интерактивной отладки при доступе к исходникам.
Я в курсе твоей любви к покрытию тестами. Уверяю, это не тот случай. Не надо придумывать другую задачу. Надо решить именно эту, в озвученных рамках. Тем более что особой технической сложности она не представляет. Но что-то неохота закапываться самому в DWARF формате.
L>Собрать как требует процесс, символы вытащить наружу, залить бинарник в пзу. Должно сработать, разве нет?
Нет.
По условиям задачи надо отлаживать именно оригинальный бинарник. Изменить нельзя. Только не спрашивай почему. Это вводная. ПЗУ, отсутствие доступа, подпись, зависимости (от не на 100% совпадающих сорцов) — что угодно, выбирай по-вкусу.
Здравствуйте, IID, Вы писали:
IID>Нет. IID>По условиям задачи надо отлаживать именно оригинальный бинарник. Изменить нельзя. Только не спрашивай почему. Это вводная. ПЗУ, отсутствие доступа, подпись, зависимости (от не на 100% совпадающих сорцов) — что угодно, выбирай по-вкусу.
Не думаю, что конкретно такой инструмент существует. Выделенное вообще делает задачу несколько слишком сложной в общем случае.
Разве только каждый раз при отладке вручную матчить с исходниками.
IID>Дано: IID>1) *.so бинарник Б1, собранный 3ей стороной, без отладочных символов. IID>2) исходники этого бинарника, из которых мною собирается ПОЧТИ такой же бинарник Б2, с символами.
IID>Проблема в том что отлаживать надо Б1 (без возможности его замены), а различия в символах усугубляется с ростом смещения внутри файла. В итоге gdb, загружая символы из Б2, показывает полную ересь. Хотя 90+% функций абсолютно идентичны, а у остальных изменения минимальны.
IID>Есть ли готовый инструмент/скирпт, который подфиксит оффсеты в символах Б2, используя экспорты Б1 как реперные точки ?
Вам придётся подогнать порядок объектников с помощью линковщика, он это умеет. Можно по фрагментам бинарного кода ориентироваться.