Как получить значение, хранящееся в регистре, используя GDB? «p / x $ ebx» завершается с ошибкой «Нет регистров». - PullRequest
3 голосов
/ 08 октября 2010

предположим, что следующий код asm

 8048deb:       e8 41 05 00 00          call   8049331 <explode_bomb>
 8048df0:       03 73 f4                add    -0xc(%ebx),%esi
 8048df3:       83 c3 04                add    $0x4,%ebx
 8048df6:       8d 45 f8                lea    -0x8(%ebp),%eax
 8048df9:       39 c3                   cmp    %eax,%ebx
 8048dfb:       75 e7                   jne    8048de4 <phase_2+0x22>

Я установил точку останова на последней строке, к этому времени я ожидаю, что в% eax и% ebx что-то будет храниться в них.

В GDB я делаю

p/x $ebx

и получите:

No registers.

Что означает эта ошибка? Как я могу получить текущий контент, хранящийся в реестре?

Ответы [ 2 ]

7 голосов
/ 08 октября 2010

p / x $ ebx прекрасно работает для меня. (Вернее, p / x $ rbx, потому что я тестирую в 64-битной ОС, но я предполагаю, что p / x $ ebx будет работать в 32-битной.) Приложение должно быть запущено. Если я попытаюсь сделать p / x $ rbx, когда приложение еще не запущено или уже вышло, я получаю «нет регистров». Вы уверены, что точка останова достигнута?

6 голосов
/ 08 октября 2010

Просто сделайте

 info register

Это даст вам регистры и их текущие значения.

Я не верю, что есть способ напечатать / получить только значение ebx, eax, ecx и т. д. Однако вы можете распечатать значение указателя кадра, счетчика программы, состояния процесса и регистров указателя стека, используя

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