Я хочу автоматизировать генерацию дизассемблирования с помощью GDB, и в конце концов я остановился на функции дизассемблирования. Я также хочу распечатать его с добавленным исходным кодом, чего можно добиться с помощью команды /s или /m. В идеале я бы ввел(
— это произвольный номер строки, поэтому он проходит через весь файл):
Первая проблема, с которой я столкнулся, заключается в том, что написано «Невозможно получить доступ к памяти по адресу 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 выводит исходный код вместе со сборочными линиями, чего не происходит, когда я указываю диапазон адресов.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ress-range