gdb调试(1):info frame的含义解读

一个代码:
在这里插入图片描述
输入info frame 的结果:
在这里插入图片描述

解读这个输出之前,需要先明白汇编中,函数的调用形式。

寄存器的英文全称:
AH&AL=AX(accumulator):累加寄存器
BH&BL=BX(base):基址寄存器
CH&CL=CX(count):计数寄存器
DH&DL=DX(data):数据寄存器
SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):基址指针寄存器
SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器
IP(Instruction Pointer):指令指针寄存器
CS(Code Segment)代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器

(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

了解几个常见的寄存器名字,记住eax一般用来保存函数的返回值,记住esp是栈顶指针寄存器,ebp是栈底指针寄存器。

对于在汇编指令上如何调用,强烈推荐这篇文章:
https://www.cnblogs.com/clover-toeic/p/3755401.html

介绍的很清楚,截图来说:
函数的形式参数就存储在单独的一个stack里面(红色)
在这里插入图片描述

另一个info frame 的解读
(gdb) info f

        Stack level 0, frame at 0xbffff5d4:

这个0xbffff5d4是你当前程序所分配使用的栈地址

         eip = 0x804845d in func (tst.c:6); saved eip 0x8048524

0x804845d为被调用的函数地址,0x8048524为调用函数的代码的地址
也就是:
0x8048524 : call 0x804845d

         called by frame at 0xbffff60c
         source language c.
         Arglist at 0xbffff5d4, args: n=250

arglist就是函数参数在栈中的地址0xbffff5d4

         Locals at 0xbffff5d4,

0xbffff5d4是函数中定义的变量在栈中的位置,从这里看来你的Arglist应该是空的

Previous frame’s sp is 0x0
因为在flat模式下,这个Previous frame’s sp 始终是0的,没意义

         Saved registers:
          ebp at 0xbffff5d4, eip at 0xbffff5d8

函数进入以后,首先会压参数列表,然后压ebp,再压寄存器以保护。从这里可以看出,
你的ebp只比eip小4,再次证明你的函数的参数列表为空

英文例子解读:
https://stackoverflow.com/questions/5144727/how-to-interpret-gdb-info-frame-output

对于不同位数的机器,这些寄存器有写不一样
在这里插入图片描述

Stack level 0, frame at 0x7fffffffe110:

	frame0表示是第一栈帧,这个0x7fffffffe110是你当前程序所分配使用的栈地址,

rip = 0x4004fd in main (func.c:11); saved rip = 0x7ffff7a2d830

0x4004fd 为被调用的函数地址,0x7ffff7a2d830 为调用函数的代码的地址
在执行这个代码之前,加了break main,也就是在main函数这里断点。

source language c.

使用语言是c

Arglist at 0x7fffffffe100, args:
Locals at 0x7fffffffe100, Previous frame’s sp is 0x7fffffffe110
Saved registers:
rbp at 0x7fffffffe100, rip at 0x7fffffffe108

代码输出的文档:

在这里插入图片描述
文档解读

发布了46 篇原创文章 · 获赞 0 · 访问量 845

猜你喜欢

转载自blog.csdn.net/github_38148039/article/details/103744270