【发布时间】:2011-02-15 18:52:22
【问题描述】:
现在我一直在使用 GDB 反汇编二进制文件并检查不同的寄存器等等。是否有一个简单的命令来检查堆栈上的所有内容?这可以仅限于函数中的所有内容吗?
【问题讨论】:
-
这应该对你有所帮助:cs.nyu.edu/courses/spring07/V22.0474-001/misc/gdb-refcard.pdf。您可以随时使用“frame”命令在帧之间跳转。
现在我一直在使用 GDB 反汇编二进制文件并检查不同的寄存器等等。是否有一个简单的命令来检查堆栈上的所有内容?这可以仅限于函数中的所有内容吗?
【问题讨论】:
对于当前栈帧:
【讨论】:
info frame 总是会告诉你有关框架的信息。如果您想了解有关变量的信息,则必须使用其他子命令,例如 info locals <name>,或完全像 print 的其他命令
bt(或backtrace)会给你一个调用堆栈。
frame <args> 将在调用堆栈上选择一个帧进行检查
info frame <args> 将为您提供有关堆栈中特定帧的信息。当不带参数调用时,它将显示当前选定的帧
info locals 可以为您提供有关堆栈上任何局部变量的信息。
【讨论】:
info frame <addr> 用于检查框架而不选择它您可以通过x/10x $sp
这将打印堆栈的前 10 个元素。
【讨论】:
$sp 指向的元素和之后的9个元素,即(如果堆栈向下增长,例如在x86中)9个元素程序实际上还没有使用。对吗?
bt full,你会得到所有帧和局部变量frame x,进入x帧顺便说一下,您应该了解进程地址空间及其组成: linux virtual address space,这将帮助您了解框架的使用方式。
【讨论】: