20145318 GDB调试汇编堆栈分析
2024-10-11 11:27:27
20145318 GDB调试汇编堆栈分析
代码
#include<stdio.h> short addend1 = 1;
static int addend2 = 2;
const static long addend3 = 3; static int g(int x)
{
return x + addend1;
} static const int f(int x)
{
return g(x + addend2);
} int main(void)
{
return f(8) + addend3;
}
分析过程
编译,产生32位汇编,进入gdb调试
在main处设置断点
break main
,运行r
,停在main,用disassemble
获取汇编代码
读取主函数的栈基址(0xffffd088)
依次如下指令调试汇编代码,并查看%esp、%ebp和堆栈内容:
1、使用si指令单步跟踪一条机器指令
2、使用i r(info registers)指令查看各寄存器的值(在这里要看%eip、%eax、%esp和%ebp)
3、使用x/na %esp对应的值指令查看堆栈变化
将上一个函数的基址入栈,从当前%esp开始作为新基址:
call指令将下一条指令的地址入栈,此时%esp,%ebp和堆栈的值为:
先为传参做准备:
将栈中的数据push
leave返回准备栈
ret结束main函数!
最新文章
- Mongodb集群搭建的三种方式
- oracle 职业学习指引
- canvas学习之制作动画
- ctrl+enter提交留言
- 架构设计--逻辑层 vs 物理层
- 关于HTTP协议的学习
- CTE Recursion Performance
- c语言结构体5之匿名结构体
- ps aux 中的状态说明
- 数值分析1:三角函数的计算(C语言实现)
- mysql 数据备份
- POJ 2594 Treasure Exploration(最小路径覆盖变形)
- Castle.DynamicProxy Part 1: ClassProxy
- HDU--1301--Jungle Roads(最小生成树)
- System.Uri类 - 获取Url的各种属性,文件名,参数,域名,端口等等
- .Net中的AOP系列之《AOP实现类型》
- 给负载均衡器添加多IP
- C# Excel行高、列宽、合并单元格、单元格边框线、冻结
- B-number 数位dp
- 云笔记项目-网页端debug功能学习
热门文章
- 【c++】虚基类
- python环境
- VUE 入门基础(2)
- Windows 2008 server IIS 7 中开启CGI, ISAPI
- convert return char from sql server 2008 r2 or below version to c#
- PRML
- java.lang.IllegalStateException: Couldn&#39;t read row 1, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data fr
- U-boot中的FDT
- Types of Learning
- excel中的TEXT函数