#debugging #arm #gdb #qemu #thumb
#отладка #arm #gdb #qemu #thumb
Вопрос:
Я практикуюсь в обращении к удаленному двоичному файлу arm (который я написал) и обнаружил, что когда я устанавливаю точку останова, скажем 0x010451
, и запускаю программу, gdb вращается вечно, пока я не нажму ctrl C. Когда я это делаю, текущий КОМПЬЮТЕР находится по адресу, но я не могу продолжить программу.
Когда я устанавливаю точку останова в 0x010450
, gdb отлично достигает точки останова, но инструкции декодируются как инструкции, не являющиеся инструкциями thumb.
Ожидается ли это? Ошибка? Я попытаюсь загрузить примеры позже сегодня.
Информация о версии (при эмуляции пользовательского режима qemu):
debian@debian-arm:~/lab$ gdb --version
GNU gdb (Debian 8.2.1-2 b3) 8.2.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3 : GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
debian@debian-arm:~/lab$ uname -a
Linux debian-arm 4.19.0-10-armmp-lpae #1 SMP Debian 4.19.132-1 (2020-07-24) armv7l GNU/Linux
Комментарии:
1. Как ни странно, настройка
set arm fallback-mode thumb
сработала, когдаset arm fallback-mode auto
этого не произошло. Теперь он останавливается на правильной инструкции thumb при установке точки останова на нечетный адрес вместо вращения, пока я не нажму ctrl c2. обратите внимание, что адрес метки — это четное число, нечетный бит используется инструкцией (bx lr, pop {pc} и т.д.), А компьютер содержит только четный адрес… чего ожидает gdb, не знаю.
3. Хм, хорошая мысль. Я не могу воспроизвести разрыв по адресу с нечетным номером, как я упоминал ранее.
set arm fallback-mode thumb
работает достаточно хорошо для меня сейчас. Я не уверен, почему бит T не устанавливается в регистре, когда у меня установлен резервный режим на auto…