C GDB:如何找到';密码短语';地址超出边界时,在$eax?

C GDB:如何找到';密码短语';地址超出边界时,在$eax?,c,debugging,passwords,gdb,C,Debugging,Passwords,Gdb,当我在GDB中取消与比较程序输入和“密码短语”相关的函数时,这里有输出。我知道真正的“密码短语”在$eax中,但是当我尝试检查$eax时,我得到了一个错误,即地址超出了范围。如何检查$eax Dump of assembler code for function s: 0x08048444 <+0>: push %ebp 0x08048445 <+1>: mov %esp,%ebp 0x08048447 <+3>:

当我在GDB中取消与比较程序输入和“密码短语”相关的函数时,这里有输出。我知道真正的“密码短语”在$eax中,但是当我尝试检查$eax时,我得到了一个错误,即地址超出了范围。如何检查$eax

Dump of assembler code for function s:
   0x08048444 <+0>:     push   %ebp
   0x08048445 <+1>:     mov    %esp,%ebp
   0x08048447 <+3>:     mov    0x8(%ebp),%edx
   0x0804844a <+6>:     mov    $0x0,%eax
   0x0804844f <+11>:    cmpb   $0x0,(%edx)
   0x08048452 <+14>:    je     0x804845d <s+25>
   0x08048454 <+16>:    add    $0x1,%eax
=> 0x08048457 <+19>:    cmpb   $0x0,(%edx,%eax,1)
   0x0804845b <+23>:    jne    0x8048454 <s+16>
   0x0804845d <+25>:    pop    %ebp
   0x0804845e <+26>:    ret
函数s的汇编程序代码转储: 0x08048444:推送%ebp 0x08048445:mov%esp,%ebp 0x08048447:mov 0x8(%ebp),%edx 0x080484A:mov$0x0,%eax 0x0804844f:cmpb$0x0,(%edx) 0x08048452:je 0x804845d 0x08048454:添加$0x1,%eax =>0x08048457:cmpb$0x0,(%edx,%eax,1) 0x0804845b:jne 0x8048454 0x0804845d:弹出%ebp 0x0804845e:ret 表示“将
0
edx+eax*1
处的字节进行比较”


您需要查看edx(
p/x$edx
)和eax(
p/x$eax
)以查看您正在寻址的字节。

密码短语位于edx而不是eax。所以你想跑

(gdb) p (char*)$edx
查看以null结尾的字符串的内容

您可以看出您想要EDX,因为代码将函数的第一个参数移到其中:

0x08048447 <+3>:     mov    0x8(%ebp),%edx
0x08048447:mov 0x8(%ebp),%edx
因为EAX被用作索引。它首先设置为0,然后在循环中递增1:

0x0804844a <+6>:     mov    $0x0,%eax
<...>
0x08048454 <+16>:    add    $0x1,%eax
0x08048457 <+19>:    cmpb   $0x0,(%edx,%eax,1)
0x0804845b <+23>:    jne    0x8048454 <s+16>
0x080484A:mov$0x0,%eax
0x08048454:添加$0x1,%eax
0x08048457:cmpb$0x0,(%edx,%eax,1)
0x0804845b:jne 0x8048454

请注意,在将
(%edx,%eax,1)
与0进行比较后,代码如何跳回增量eax

您的意思是您正在使用
x$edx
p$edx
说了些什么?哎呀,重写这个问题。很抱歉。这个问题实际上是关于$eax的,我使用的是x$eax。它给了我这个输出:
0x1:
如果
$eax
的值只有1,这难道不意味着
$eax
实际上不包含指向密码短语的指针吗?是的,我认为。。。但是当
cmpb$0x0,(%edx,$eax,1)
时,cmpb比较的是什么?不仅%edx用作SIB字节中的基址寄存器,而且在函数开始时%eax显式设置为0,而%edx接收函数参数:
0x0804847:mov 0x8(%ebp),%edx;0x080484A:mov$0x0,%eax
0x0804844a <+6>:     mov    $0x0,%eax
<...>
0x08048454 <+16>:    add    $0x1,%eax
0x08048457 <+19>:    cmpb   $0x0,(%edx,%eax,1)
0x0804845b <+23>:    jne    0x8048454 <s+16>