В настоящее время я пытаюсь отточить свои навыки чтения ассемблера в GDB, и я столкнулся с какой-то странностью при попытке прочитать символ в GDB, и я не уверен, что происходит.
Для некоторого контекста файл, на который я смотрю, скомпилирован, функции .c нет, хотя код был скомпилирован в c. По сути, это файл назначения «бомба», в котором требуются определенные входные данные для перехода к следующему разделу кода, и этот код получен в результате тестирования одного из входных данных на предмет того, каким должен быть ответ.
Код, содержащий символ, который я пытаюсь прочитать, выглядит следующим образом:
cmp -0x1(%rbp),%al
je 0x400acf <nextpartofcode>
Я пытаюсь прочитать -0x1 (% rbp), поэтому я ввел print/c $rbp-1
, чтобы попытаться посмотреть на него, и напечатал GDB: 175 '\257'
. Предполагая, что этот вывод означал, что сравнение было бы успешным, если поместить в ASCII-символ 175, однако, когда я ввел символ (он выглядит как >>), он был показан как -62 '\302'
.
Я также попытался прочитать значение как целое число, восьмеричное значение, десятичное значение, строку и шестнадцатеричное значение с таким же успехом, и я потерял все то, что я могу попробовать. Что именно здесь происходит? Я смотрю не в том месте (то есть -0x1 (% rbp) не $ rbp-1)? Я читаю значение как что-то не то (мне сказали, что это должен быть символ, но это что-то еще)? Должен ли я искать в другом месте значение? Я застрял, и я был бы признателен за любые указания.