Флаги «дизассемблирования» GDB /m и /s не работают при указании диапазона адресов.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Флаги «дизассемблирования» GDB /m и /s не работают при указании диапазона адресов.

Сообщение Anonymous »

Я хочу автоматизировать генерацию дизассемблирования с помощью GDB, и в конце концов я остановился на функции дизассемблирования. Я также хочу распечатать его с добавленным исходным кодом, чего можно добиться с помощью команды /s или /m. В идеале я бы ввел(

Код: Выделить всё

0xFFFFFF
— это произвольный номер строки, поэтому он проходит через весь файл):

Код: Выделить всё

(gdb) disas /m 0,0xFFFFFF
Первая проблема, с которой я столкнулся, заключается в том, что написано «Невозможно получить доступ к памяти по адресу 0x4», которую можно обойти, указав начальный адрес как 8. Но затем, когда я запускаю его, он показывает только строки сборки без исходного кода.
Для контекста я запускаю ARM-версию GDB (хотя только GDB ведет себя так же) с объектным файлом, который был скомпилирован из файла C++. Например:

Код: Выделить всё

arm-none-eabi-gdb --quiet build/L4/02_base/rtc.o -iex="set osabi none" -ex="set architecture armv4" -ex="set pagination off" -ex="set verbose off"
Единственное «решение», которое я нашел, — это указать самый первый символ, существующий в объектном файле (это _ZL8int8_MAX для этого файла):

Код: Выделить всё

(gdb) disas /m _ZL8int8_MAX,+0xFFFFFF
Проблема в том, что это невозможно автоматизировать (и, честно говоря, это даже не часто работает).
Как я могу сделать вывод исходного кода GDB вместе со строками сборки, когда я указываю диапазон адресов?
EDIT:
Я обнаружил, что GDB производит вывод для кода C со вставленным кодом (библиотека STM HAL написана на C), и поэтому дизассемблирует их .c исходные файлы содержат исходный код (скомпилированный с помощью Arm-none-eabi-gcc одновременно с компиляцией остального кода). Однако наш код написан на C++ (и скомпилирован с помощью Arm-none-eabi-g++), и в дизассемблер не вставлен исходный код.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ress-range
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»