20145316GDB调试汇编堆栈
GDB调试例子的汇编堆栈
- 代码
- 直接-m32编译出现问题
- 编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386
- 编译成功,进入gdb调试界面
- 在main处设置断点、运行并获取汇编代码查看各寄存器状态


- 主函数栈基址为0xffffd104,值为0

- call指令将下一条指令地址入栈,%esp、%ebp值发生变化



- 上一个函数的基址入栈,从当前%esp开始作为新基址,原地址压栈保存



- 为传参做准备



- 实参计算在%eax中进行

- f函数汇编代码

- 实参入栈



- call指令将下一条指令的地址入栈






- 计算short+int







- pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节



- ret指令将栈顶弹给%eip









堆栈情况
|
指令 |
%esp |
%ebp |
堆栈 |
|
movl$0x8,(%esp) |
0ffffd104 |
0ffffd108 |
0x0 |
|
call 0x8048401 |
0ffffd100 |
0ffffd108 |
0x8 0x0 |
|
push %ebp |
0ffffd100 |
0ffffd108 |
0x804842e 0x8 0x0 |
|
mov %esp,%ebp |
0ffffd0fc |
0ffffd108 |
0xffffd108 0x804842e 0x8 0x0 |
|
mov 0x804a01c,%edx/// |
0ffffcf6c |
0ffffcf6c |
0xffffcf78 0x804842e 0x8 0x0 |
|
call 0x80483ed |
0ffffd0f8 |
0ffffd0fc |
0xa 0xffffd108 0x804842e 0x8 0x0 |
|
push %ebp |
0ffffd0f4 |
0ffffd0fc |
0x804841a 0xa 0xffffd108 0x804842e 0x8 0x0 |
|
mov %esp,%ebp |
0ffffd0f0 |
0ffffd0fc |
0xffffd0fc 0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0 |
|
movzwl 0x804841a,%eax |
0ffffd0f0 |
0ffffd0f0 |
0xffffd0fc 0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0 |
|
ret |
0ffffd0f4 |
0xffffd0fc |
0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0 |
|
leave |
0ffffd0f8 |
0ffffd0fc |
0xa 0xffffcd108 0x804842e 0x8 0x0 |
|
ret |
0ffffd100 |
0ffffd108 |
0x804842e 0x8 0x0 |
|
leave |
0ffffd104 |
0ffffd108 |
0x8 0x0 |
|
ret |
0xffffd10c |
0x0 |
20145316GDB调试汇编堆栈的更多相关文章
- 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 + ...
- gdb调试汇编堆栈过程的学习
gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...
- 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...
- GDB调试汇编堆栈
GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { ...
- 赵文豪 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 使用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 ...
- 20145320GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 在这里首先感谢卢肖明的分析博客,为后面的同学减少了很多分析的负担. 分析过程 使用gcc - g example.c -o example -m32指令在64位的机器上产生 ...
随机推荐
- 完全卸载VS2005或VS2008的步骤
手动卸载步骤: Visual Studio Express Editions 进入控制面板,运行添加或删除程序 卸载 "MSDN Library for Visual Studio 200 ...
- php 修改上传文件大小 (max_execution_time post_max_size)
有些朋友要通过自己的网站后台,包括论坛,来上传一些文件,php一般为2m,或8m(以下我们按默认为2m),接下来就是来讲怎么修改上传文件大小的. 1.首先修改执行上传文件限制 一般的文件上传,除非文件 ...
- Android开发之 Android 的基本组件的概述
Android是一个为组件化而搭建的平台,它的应用是由一些零散的有联系的组件组成,并通过AndroidManifest.xml文件 把它们绑定起来. Android常用的组件有: Activity(活 ...
- p2p投资理财入门篇(新手必备)
在互联网金融浪潮下,如果你只知道余额宝.理财通,如果你认为宝宝们就可以代表整个互联网金融,那可真是大错特错.这些年来,P2P这股强大势力一直在互联网金融领域兴风作浪,随着被高层正名.监管升级,P2P的 ...
- 烂泥:SQL Server 2005数据库备份与恢复
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 服务器的迁移,因为业务使用的数据库是SQL Server 2005,所以就要首先对数据库进行备份. 备份可以分为手动备份和自动备份,我们先来介绍手动备份 ...
- linux中如何查看进程对应的cpu使用情况?
使用ps aux | grep <进程名>即可查看指定进程的cpu使用情况.
- CGI(通用网关接口)
公共网关接口 CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在C ...
- 我所理解的 惠普云 (HP Cloud)
HP (惠普)于2014年5月27日宣布了它的新的云产品线 HP Helion,并宣布在接下来的两年时间内向该产品线投资10亿美金.应该说这是一笔很大的投入,充分显示了HP 在云这个领域的决心.本文试 ...
- hdu1710(二叉树的历遍)
/* Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- 分享一个Fluent风格的邮件发送封装类
C#中用SmtpClient发邮件很简单,闲着无事,简单封装一下 IEmailFactory public interface IEmailFactory { IEmailFactory SetHos ...