Почему ошибка: «Значение не может быть преобразовано в целое число» при доступе к $ EAX? - PullRequest
1 голос
/ 16 февраля 2012

Почему я не могу получить доступ к информации %eax? Вот скриншот. Я почти уверен, что %eax содержит какую-то строку ...

enter image description here

Хорошо, вот функция отладки. Требуется 6 цифр, и если кто-то ошибается, взрывается «бомба». Вот функция:

40106b: 55                      push   %rbp
40106c: 53                      push   %rbx
40106d: 48 83 ec 28             sub    $0x28,%rsp
401071: 48 89 e6                mov    %rsp,%rsi
401074: e8 ae 03 00 00          callq  401427 <read_six_numbers>
401079: 83 3c 24 01             cmpl   $0x1,(%rsp)
40107d: 74 05                   je     401084 <phase_2+0x19>
40107f: e8 6d 03 00 00          callq  4013f1 <explode_bomb>
401084: 48 8d 5c 24 04          lea    0x4(%rsp),%rbx
401089: 48 8d 6c 24 18          lea    0x18(%rsp),%rbp
40108e: 8b 43 fc                mov    0xfffffffffffffffc(%rbx),%eax
401091: 01 c0                   add    %eax,%eax
401093: 39 03                   cmp    %eax,(%rbx)
401095: 74 05                   je     40109c <phase_2+0x31>
401097: e8 55 03 00 00          callq  4013f1 <explode_bomb>
40109c: 48 83 c3 04             add    $0x4,%rbx
4010a0: 48 39 eb                cmp    %rbp,%rbx
4010a3: 75 e9                   jne    40108e <phase_2+0x23>
4010a5: 48 83 c4 28             add    $0x28,%rsp
4010a9: 5b                      pop    %rbx
4010aa: 5d                      pop    %rbp
4010ab: c3                      retq   

и это read_six_numbers, если необходимо:

0000000000401427 <read_six_numbers>:
401427: 48 83 ec 18             sub    $0x18,%rsp
40142b: 48 8d 4e 04             lea    0x4(%rsi),%rcx
40142f: 48 8d 46 14             lea    0x14(%rsi),%rax
401433: 48 89 44 24 08          mov    %rax,0x8(%rsp)
401438: 48 8d 46 10             lea    0x10(%rsi),%rax
40143c: 48 89 04 24             mov    %rax,(%rsp)
401440: 4c 8d 4e 0c             lea    0xc(%rsi),%r9
401444: 4c 8d 46 08             lea    0x8(%rsi),%r8
401448: 48 89 f2                mov    %rsi,%rdx
40144b: be 7e 26 40 00          mov    $0x40267e,%esi
401450: b8 00 00 00 00          mov    $0x0,%eax
401455: e8 26 f7 ff ff          callq  400b80 <sscanf@plt>
40145a: 83 f8 05                cmp    $0x5,%eax
40145d: 7f 05                   jg     401464 <read_six_numbers+0x3d>
40145f: e8 8d ff ff ff          callq  4013f1 <explode_bomb>
401464: 48 83 c4 18             add    $0x18,%rsp
401468: c3                      retq   

1 Ответ

3 голосов
/ 17 февраля 2012

Попробуйте x/w $rax вместо.GDB не знает, что такое $eax при отладке 64-битного кода.

Это можно считать ошибкой (пусть) в GDB.

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