Assembly 为什么出错:“为什么出错?”;值可以';不能转换为整数;在访问$EAX时?
为什么我不能访问Assembly 为什么出错:“为什么出错?”;值可以';不能转换为整数;在访问$EAX时?,assembly,gdb,Assembly,Gdb,为什么我不能访问%eax的任何信息?这是一个截图。我很确定%eax持有某种字符串 好的,这是我调试的函数。它需要6个数字,如果一个数字错了,就会有一个“炸弹”爆炸。以下是函数: 40106b: 55 push %rbp 40106c: 53 push %rbx 40106d: 48 83 ec 28 sub $0x28,%rsp 401071: 48 89 e6
%eax
的任何信息?这是一个截图。我很确定%eax
持有某种字符串
好的,这是我调试的函数。它需要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
请尝试
x/w$rax
。在调试64位代码时,GDB不知道什么是$eax
这可能被认为是GDB中的一个bug(let)。请将日志粘贴到此处,而不是链接到图像。是什么让你认为在
eax
中有一个字符串?因为它将%eax持有的任何内容与我们的第二个条目进行比较。到目前为止,我得到的第一个条目是1,因为cmpl$0x1,(%rsp)。我的第二个条目是在2岁时测试的,它起了作用,但不确定为什么
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