GCC - The Complete Reference (537669), страница 55
Текст из файла (страница 55)
Файл с именем 1(1-11ппх. во является вспомогательной программой ()те(рег ргоягап)) 1б во, которая выполняет основную работу по загрузке разделяемых библиотек и выполнению их функций. Довольно удобно использовать 1бб для точного определения версии разделяемой библиотеки, используемой программой во врел(я выполнения. Другая важная причина применения утилиты 1(Ы вЂ” определение любых неразрешимых ссылок на разделяемые библиотеки.
Например, если программа всмоЬе11ов из четвертой главы была скомпилирована правильно, но разделяемая библиотека, с которой компилировалась программа, не была должным образом установлена в системе, то вывод утилиты 1(Ы будет выглядеть следующим образом: б 1оо веиоЬе11ов вЬе11о.во => тюс ксива 11Ъс.во.б => /11Ы11Ьс.во.б (Ох40027000) 11Ьдсс в.во.1 => /пвк/11Ы11Ьдсс в.во.1 (Ох401бб000) /11Ы10-11ппх.во.2 => /11Ь/1к(-11ппх.во.2 (Ох40000000) Вывод внутренней информации объектного файла Для вывода из объектных файлов, статических и разделяемых библиотек содержащейся в них внутренней информации может использоваться программа оЬ1(Ьпар. Эта утилита находит в файлах разного рода дополнительную информацию и представляет ее в читаемом виде.
Она может использоваться для сбора информации из файлов различного объектного формата. Для получения перечня доступных форматов объектного кода, распознаваемых утилитой оЬз бр)вр, нужно ввести следующую команду: б оЬЗПсвр -1 При запуске утилиты оЬз би(ар для выделения информации из файлов строка команды должна содержать опции, которые определяют способ и порядок извлечения информации. Они перечислены в таблице 12.6. В таблице ) 2.7 представлены до- 243 Часть ПК Внутренняя структура и окружение Е оъбдпвр -Е -Ь -ЕВ Ье11оиог1д.о Таблица 12.6.
Ко откие и длинные ормы основных опций утилиты оЬ'боптр Короткая Длвннва Вмвадвмвв ввфвриеявя Поля заголовка архива. Представление исполняемого кода на языка ассемблера, Ассемблерное представление исполняемого кода и данных. Все содержимое заголовка объектного файла. Отладочная информация. Любая информация формата ВТАВЯ в необработанном виде.
Содержимое заголовков разделов. Список опций утилиты оЬздпвр. Список поддерживаемых форматов объектного када и машинных архитектур. Специфическое содержимое полей заголовка файла особого объектного формата. Информация о перемещаемом коде. Информация о динамически перемещаемом коде. Ассемблерное представление исполняемого объектного кода, смешанное с исходным кодом на языке высокого уровня. Ассемблерное представление всего объектного кода, смешанное с исходным кодом на языке высокого уровня.
Содержимое таблицы программных символов. Содержимое таблицы динамически перемещаемых символов. --ассьь ге-Ьеадеса --д1ааевевЬ1е --д1ааееавые-а11 --111е-Ьеадехе — деЬидд1пе --екаЬЕ --весс1оп-Ьеадесе --Ье1р --1пео -р -л --рс1часе-Ьеадесв --хе1ос --дупав1с-се1ос --еопксе — Еп11-сопкепье - -е1лав — дупавдс-еуве --чекв1оп --а11-Ьеадеке Версия утилиты оъчдпвр. Содержимое заголовков всех файлов.
-ч Таблица 12,7. Модифицирующие опции утилиты оЬ)оигпр Оленя --адзпас-тва=оеевес Добавляет заданное смещение оееаес к значениям всех выводимых адресов раздела. --ассььсесспха=хвсьепе Задает формат объектного кода входного файла. Для определения доступных вариантов машинной архитектуры следует выполнить команду: оЬЗд р -1 То же, что и опция --сасяес. -Ь ЬЕдпаве полнительные опции, которые могут использоваться для модификации обработки входных данных нли для форматирования вывода.
Например, у нас есть файл Ье11омог16. о, в котором содержится объектный код для машины с обратным порядком представления байт (формат "Ьйй епйап"). Для вывода информационного заголовка этого файла (Яе )теаг)ег) и заголовков всех разделов объектного кода (зесбоп Ьеабегз) следует ввести следующую команду: Оииаиияе То же, что и --йевалд1е. Имена символов в объектном коде воспринимаются как сокращенные (гланд(еб) имена исходного кода.
Тип сокращения указывает значение поля суре. Допустимыми могут быть следующие значения: аппо, дпи, 1лс1й, ахв, Ьр, ейд, длл-тз, 5ата, длас и саврас. Список одной или нескольких опций е поле ср передается программе, которая выполняет обратное преобразование объектного кода в ассемблерные инструкции (дизассемблеру). Указывает не пропускать блоки нулевых байтов при обратном преобразовании объектного кода в ассемблерные инструкции (дизассемблировании).
То же, что и опция --епй1вп Ь1д. То же, что и --епйзап 11сс1е. -с суре --йепвпд1е Суре — йзваввавйг1ек-срь1олв=ар -й1ваввевЬ1е-хехсев -вв -вь Указывает прямой или обратный порядок байт машинного формата представления данных во входном объектном коде. Поле вьзсь может иметь значение 11сь1е или ь1д. Слово 11сс1е соответствует прямому порядку байт (бйбе епд)ап), а слово Ь1д — обратному порядку байт (Ыд епд)ап). При использовании опции -з, зтот модификатор будет включать в вывод контекстную информацию (соп(ех() из начальной области файла.
— епй1ап влзсп -Ше-впахз-сслпехк То же, что и опция --весс1сп. То же, что и --11ле-пшвЬекв. Включает в вывод имена файлов и номера строк. То же, что и --й1ваввевЬ1ех-срс1олв. То же, что и --ахсь1сесклхе. -1 люхе — 11пе-плвЬехв -а васлхпе --рке11м-аййкевв Выводит полную адресную информацию, связанную с каждой дизассемблированной инструкцией. Выводит внутреннюю информацию только из разделов объектного кода с именами, указанными а поле паве.
-весс1оп=паве Выводит шестнадцатиричные коды машинных операций вместе с мнемоническими инструкциями ассемблера. -вьсн-каи-1пвп Обрабатывает данные, расположенные после указанного в пале аййхевв адреса. -всахв-аййхевв аййхевв Обрабатывает данные, расположенные до указанного в поле аййкевв адреса. Задает формат кода входного объектного файла. Для определения доступных форматов следует выполнить команду: -вкср-аййхевв=аййхевв -Какдеь ЬЕйпаве оЬздшвр ТО жЕ, ЧтО И ОПцИя --и1йс. Снимает ограничение ширины страницы выходного листинга.
По умолчанию применяется ширина е 80 столбцов. То же, что и опция --й1ваввевЬ1е-зехоев. -н1йе Глава 12. Использование библиотек и способы компоновки 249 ава Иепвпьзвввппв виппвпчпкв ИИИ у тилита дбЬ является основным отладчиком (деЬцййег) проекта О)~) С. Этот отладчик запускается из командной строки, он может использоваться для полного управления выполнением любого процесса и для исследования его работы. На команды утилиты дг)Ь будут реагировать все программы.
Но только те из них, которые компилировались и компоновались с опциями включения информации, касающейся исходного кода, могут предоставить необходимые данные для трассировки процесса выполнения. Самый простой способ запуска интерактивного сеанса отладки — при запуске утилиты дбЬ указать имя программы в командной строке. Тот же результат дает запуск отладчика с последующей загрузкой программы. Кроме того, отладчику можно указать подключиться к запушенной программе, что позволяет проанализировать ход выполнения программы, которая начинает странно себя вести после некоторого времени работы. Третье назначение утилиты дбЬ заключается в "посмертном" (роз1гпогГа)) анализе аварийно завершившейся программы для определения причин ее аварийного завершения. Форматы отладочной информации Для отладки программы необходимо, чтобы в объектный файл была включена информация о программе.
С помощью такой информации отладчик имеет возможность сопоставить двоичный код его исходному тексту и прелоставить в читаемом виде данные, на основе которых можно точно определить выполняемые программой действия. Без этой включаемой информации все, что известно отладчику о программе,— это только абсолютные двоичные адреса и машинные коды выполняемых операций. Эти данные очень сложно сопоставить с исходным кодом программы.
Глава 1З. Использование отладчика ам(1 25 1 Существует несколько форматов для хранения информации в объектных файлах. Для выполнения своих задач отладчикдолжен корректно воспринимать формат отладочной информации. К счастью, отладчик даь распознает целый ряд существующих форматов и дополнительно понимает некоторые особые расширения отладочной информации, помещаемые в код компилятором дсс. Формат 5ТАВ5 Формат отладочной информации ЗУАВА (БутЬо1 ТАВ(е сйгес(1теб) был первоначально разработан для использования в качестве отладчика языка программирования Рааса(.
Он оказался довольно удобным и получил широкое распространение. Компилятор дсс добавляет отладочную информацию в формате БТАВБ (таблицы перекодировки символов) в генерируемый им ассемблерный код, и в дальнейшем зта информация включается в создаваемый ассемблером объектный код. Ассемблер добавляет информацию БТАВБ в таблицу перекодировки символов и таблицу строк, которые включаются в конец каждого файла с расширением .о.
Компоновщик объединяет объектные файлы в выполнимый файл, собирая все таблицы в единую таблицу перекодировки символов, которая в дальнейшем используется отладчиком для идентификации разделов выполнимого кода. Три директивы ассемблера, используемые для создания таблиц перекодировки символов, имеют следующий вид: .веаьв "пате:вутсесв=еуре1пго",суре,оеьег,севсг1ре1оп,тга1ие .всаЬп суре,освег,севсг1рс1оп,уа1ие .всаЬс суре,оспег,ктевсгхрс1оп Каждая из приведенных директив содержит поле суре, которое предоставляет баювую информацию (например, является ли директива новым определением или ссылкой на существующее определение). Поле суре, кроме того, определяет содер- жИМОЕ ПОЛЕЙ ОЕЬЕГ И С(ЕВСГдрЕХОП.