赵文豪 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析
使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器:
使用gdb调试代码。
使用break main指令在main函数处设置断点,然后调试,直到mian函数处。


使用diassemble指令获取汇编代码




查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0

使用命令display /i $pc每次程序中断后可以看到即将被执行的下一条汇编指令

call将下一条指令的所在地址(即当时程序计数器PC的内容)入栈

准备传参

查看f函数的汇编代码

g分配栈空间

pop %ebp指令将栈顶弹到%ebp中

ret返回g中call的调用位置

ret返回f中call的调用位置,结束f函数

主函数汇编代码

将%edx于%eax相加

ret结束main函数

| 指令 | %eip | %esp | %ebp | %eax | 堆栈 |
|---|---|---|---|---|---|
| push $0x8 | 0x804840b | 0xffffd048 | 0xffffd048 | 0xf7fb8dbc | 0x0 |
| call 0x80483ef | 0x804840d | 0xffffd044 | 0xffffd048 | 0xf7fb8dbc | 0x8 0x0 |
| push %ebp | 0x80483ef | 0xffffd040 | 0xffffd048 | 0xf7fb8dbc | 0x8048412 0x8 0x0 |
| mov %esp,%ebp | 0x80483f0 | 0xffffd03c | 0xffffd048 | 0xf7fb8dbc | |
| mov 0x804a01c,%edx | 0x80483f2 | 0xffffd03c | 0xffffd03c | 0xf7fb8dbc | 0xffffd048 0x8048412 0x8 0x0 |
| mov 0x8(%ebp),%eax | 0x80483f8 | 0xffffd03c | 0xffffd03c | 0xf7fb8dbc | 0xffffd048 0x8048412 0x8 0x0 |
| call 0x80483db | 0x80483fe | 0xffffd038 | 0xffffd03c | 0xa | 0xa 0xffffd048 0x8048412 0x8 0x0 |
| push %ebp | 0x80483db | 0xffffd034 | 0xffffd03c | 0xa | 0x8048403 0xa 0xffffd048 0x8048412 0x8 0x0 |
| mov %esp,%ebp | 0x80483dc | 0xffffd030 | 0xffffd03c | 0xa | 0xffffd03c 0x8048403 0xa 0xffffd048 0x8048412 0x8 0x0 |
| ret | 0x80483ee | 0xffffd034 | 0xffffd03c | 0xb | 0x8048403 0xa 0xffffd048 0x8048412 0x8 0x0 |
| leave | 0x8048406 | 0xffffd03c | 0xffffd03c | 0xb | 0xffffd048 0x8048412 0x8 0x0 |
| ret | 0x8048407 | 0xffffd040 | 0xffffd048 | 0xb | 0x8048412 0x8 0x0 |
| add $0x4,%esp | 0x8048407 | 0xffffd040 | 0xffffd048 | 0xb | 0x8 0x0 |
| leave | 0x804841c | 0xffffd048 | 0xffffd048 | 0xe | 0x0 |
| ret | 0x804841d | 0xffffd04c | 0x0 | 0xe |
赵文豪 GDB调试汇编堆栈过程分析的更多相关文章
- GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...
- 20145212——GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...
- 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...
- 20145337 GDB调试汇编堆栈过程分析
20145337 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...
- 20145208 GDB调试汇编堆栈过程分析
20145208 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...
- 20145218 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 虚拟机中分析过程 输入gcc - g example.c -o example -m32指令在64位机器上产生32位汇编,但出现以下错误: 这时需要使用sudo apt-g ...
- 20145236 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 首先需要输入sudo apt-get install libc6-dev-i386安装一个库才能产生汇编代码,然后输入gcc - g example.c -o exampl ...
- 20145312 GDB调试汇编堆栈过程分析
20145312 GDB调试汇编堆栈过程分析 参考资料 卢肖明同学的博客:<GDB调试汇编堆栈过程分析>: http://www.cnblogs.com/lxm20145215----/p ...
- 20145240 GDB调试汇编堆栈过程分析
20145240 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...
随机推荐
- 深入理解Objective-C:Category
摘要 无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况.那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择.但是在Objective-C 2.0中,又提供了categ ...
- 假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢
比如: select id, name from table1 where name = 'x' union all select id, name from table2 where name = ...
- wireshark使用方法总结
Wireshark基本用法 抓取报文: 下载和安装好Wireshark之后,启动Wireshark并且在接口列表中选择接口名,然后开始在此接口上抓包.例如,如果想要在无线网络上抓取流量,点击无线接口. ...
- 【体系结构】动态调度算法:记分牌算法和tomasulo算法
记分牌和tomasulo算法 动态调度: 通过硬件在程序执行时重新安排代码的执行序列来减少竞争引起的流水线停顿时间 动态调度流水线具备以下功能: (1)允许按序取多条指令和发射多条指令----取指(I ...
- 隐藏进程中的模块绕过IceSword的检测
标 题: [原创] 隐藏进程中的模块绕过IceSword的检测 作 者: xPLK 时 间: 2008-06-19,17:59:11 链 接: http://bbs.pediy.com/showthr ...
- mysql的查询、子查询及连接查询
>>>>>>>>>> 一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组). ...
- 用js把数据从一个页面传到另一个页面
用js把数据从一个页面传到另一个页面的层里? 如果是传到新页面的话,你网站基于什么语言开发直接用get或者post获取,然后输出到这个层 通过url传参 如果是HTML页面的话JS传到新页面就wind ...
- selenium使用Xpath定位之完整篇
其中有一片文章提到了xpath元素定位,但是该文章中有些并不能适应一些特殊与个性化的场景.在文本中提供xpath元素的定位终极篇,你一定能在这里找到你需要的解决办法. 第一种方法: 通过绝对路径做定位 ...
- ODAC (odp.net) 从开发到部署
2013-09-30 16:08 4097人阅读 评论(0) 收藏 举报 分类: Oracle(10) 版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 确定你开发机和服务器的操作系统是 ...
- LeetCode 412. Fizz Buzz
Problem: Write a program that outputs the string representation of numbers from 1 to n. But for mult ...