Дизассемблирование с чередованием исходников из GDB и objdump

Во время одного из моих сеансов отладки (FWIW, ARM) я заметил, что выходные данные дизассемблирования с чередованием исходного кода из GDB и objdump -S отличаются интересным образом: objdump кажется, что они перескакивают через отдельные/группы инструкций и отображают исходную строку, из которой эти инструкции были сгенерированы ( порядок инструктажа). Дизассемблирование GDB, с другой стороны, похоже, проходит через исходные строки и перечисляет все инструкции по сборке, сгенерированные из этой исходной строки (исходный порядок).

Для кода -O0 вывод обеих программ будет выглядеть одинаково. Но для оптимизированного кода дизассемблирование GDB более полезно, поскольку оно собирает все эти разбросанные в противном случае инструкции в одном месте, так что легко увидеть, что сгенерировано одной этой исходной строкой (очевидно, в этом случае адреса инструкций не будут отображаться). быть непрерывным).

Я думаю, что обе формы полезны по-своему. Мой вопрос заключается в том, можно ли настроить поведение отображения любой программы. IOW, могу ли я указать GDB отображать как objdump или указать objdump отображать как GDB? Кроме того, есть ли другие инструменты, которые могут выполнить этот подвиг?

ТИА.


person Jeenu    schedule 05.10.2015    source источник


Ответы (1)


Я не верю, что есть какой-либо способ изменить поведение objdump, однако недавно в gdb была добавлена ​​функция, позволяющая отображать чередующийся исходный код в порядке инструкций. Эта функция настолько новая, что ее еще нет ни в одном выпуске, но вы можете увидеть исправления здесь и здесь.

С этими патчами старый флаг /m по-прежнему дизассемблируется в порядке строк исходного кода программы, а новый флаг /s дизассемблируется в порядке инструкций. Долгосрочный план состоит в том, чтобы удалить /m, так как в некоторых крайних случаях он не работает, и его не стоит исправлять.

person Andrew    schedule 05.10.2015
comment
Спасибо за это. Означает ли это, что способность GDB к дизассемблированию с чередованием исходников полностью исчезнет? Это заставило бы меня волноваться. - person Jeenu; 06.10.2015
comment
Нет, /m однажды (вероятно, через много времени) будет удалено, а /s останется. Вы по-прежнему получаете исходники + инструкции, просто /s заказов по адресу инструкции. - person Andrew; 06.10.2015
comment
Это был бы облом. Из того, что я понял, /m — это единственный способ упорядочить дизассемблирование по источнику (оказывается очень полезным, даже если у него есть некоторые крайние случаи). Я надеюсь, что это действительно, очень, долгое время осталось. - person Jeenu; 06.10.2015