作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道您可以使用 gdb 查看 $ebp 的正偏移量来找到任何参数:
(gdb) x/4wx $ebp
然后,我会使用 x/s
查看第 3 个和第 4 个地址,因为它们将是第一个和第二个参数。局部变量呢?我如何看待与 $ebp 负偏移的值?另外,有没有办法查看 $eax 的值?每当我尝试使用 x/s $eax
打印 $eax 的值时,地址超出范围或值为 0,我确信这不是因为我只是放了一个常量寄存器中的值。
我尝试了 info locals
但我收到消息“没有可用的符号表信息”。
最佳答案
首先,您需要将调试符号编译到您的二进制文件中。在当前命令中使用 gcc 的 -g 选项来执行此操作。如果您使用不同的编译器,则需要查阅其文档。在此之后,'info locals' 和 print 命令将起作用。
要查看任何局部变量,您需要做的就是使用“打印”命令。例如,查看局部变量“i”就像“打印 i”一样简单。
您应该能够像处理 $ebp 一样处理 $eax。我怀疑您有问题,因为您使用的是 x/s。 x/s 将尝试打印出一个字符串,因此它会继续打印直到遇到空字符。如果长时间没有发生这种情况,则字符串的长度将超出范围。尝试“x/d $eax”。你甚至可以做'print $eax'。您还可以使用“信息寄存器”来获取所有寄存器数据。
关于c - 如何用gdb读取局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5959503/
我是一名优秀的程序员,十分优秀!