我知道你可以通过使用gdb查看$ ebp的正偏移来找到任何参数:
(gdb) x/4wx $ebp
Run Code Online (Sandbox Code Playgroud)
然后,我会查看使用的第3和第4个地址,x/s
因为它们将是第一个和第二个参数.局部变量怎么样?我如何看待$ ebp的负偏移值?另外,无论如何看看$ eax的价值?每当我尝试打印$ eax的值时x/s $eax
,地址超出范围或值为0,我确信这不是因为我只是在寄存器中放入一个常量值.
我试过,info locals
但我收到消息"没有符号表信息可用".
首先,您需要将符号编译到二进制文件中.使用gcc上的-g选项和当前命令执行此操作.如果您使用的是其他编译器,则需要查阅其文档.在此之后,'info locals'和print命令将起作用.
要查看任何局部变量,您只需使用'print'命令即可.例如,查看局部变量'i'就像'print i'一样简单.
您应该能够以与$ ebp相同的方式处理$ eax.我怀疑你有问题,因为你正在使用x/s.x/s将尝试打印出一个字符串,因此它将一直持续到达到空字符.如果这种情况很长时间没有发生,那么字符串的长度将超出范围.试试'x/d $ eax'.你甚至可以'打印$ eax'.您还可以使用'info registers'来获取所有寄存器数据.