GDB: приведение зависит от скомпилированного языка - PullRequest
1 голос
/ 01 апреля 2019

Я отлаживал программу, скомпилированную в Rust с использованием GDB (arm-none-eabi-gdb).В какой-то момент я хотел записать адрес памяти следующим образом:

(gdb) set *((int *) 0x24040000) = 0x0000CAFE
syntax error in expression, near `) 0x24040000) = 0x0000CAFE'.

После нескольких пробных попыток я обнаружил, что я использую стиль C, и мне пришлось преобразовать его в стиль Rust следующим образом:

set *(0x24040000 as *mut i32) = 0x0000CAFE

Мой вопрос заключается в том, как GDB интерпретирует различные команды и почему я получаю эту ошибку.Это потому, что символ (int) не распознается, но как в этом случае GDB загружает символы?Нужно ли GDB компилировать инструкцию на правильный язык исполняемого двоичного файла на цели?

1 Ответ

2 голосов
/ 01 апреля 2019

Да, это зависит от языка, и язык определяется из имени файла загруженного исходного файла.


Цитирование руководство :

print и многие другие команды GDB принимают выражение и вычисляют его значение. Любая константа, переменная или оператор, определенные используемым языком программирования, действительны в выражении в GDB .Это включает в себя условные выражения, вызовы функций, приведение и строковые константы.

И :

Если вам не интересно видеть значениеназначение, используйте команду set вместо команды print.set действительно совпадает с print за исключением того, что значение выражения не печатается и не заносится в историю значений (см. История значений).Выражение оценивается только для его эффектов.

И :

Информация о языке встроена в GDB для некоторых языков, что позволяет вамвыражайте операции, подобные описанным выше, на родном языке вашей программы и позволяя GDB выводить значения в соответствии с синтаксисом родного языка вашей программы. Язык, который вы используете для построения выражений, называется рабочим языком.

И :

Существует два способауправляйте рабочим языком - либо GDB установит его автоматически, либо выберите его вручную.Вы можете использовать команду set language для любой цели.При запуске GDB по умолчанию устанавливает язык автоматически.

[..] Большую часть времени GDB выводит язык из имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...