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位的机器上产生 ...
随机推荐
- 日常工作生活中的做人做事道理[持续更新ing]
1.凡是预则立,不预则废 2.不能用特殊案例说明事情本身的发展规律 3.任务不能拖,需主动出击,想方设法完成 4.工作要有细致化的沟通和安排 5.解决问题和安排任务可以逆向思维的去想 6.问题要举一反 ...
- Swift语言实战晋级
Swift语言实战晋级基本信息作者: 老镇 丛书名: 爱上Swift出版社:人民邮电出版社ISBN:9787115378804上架时间:2014-12-26出版日期:2015 年1月开本:16开页码: ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- 在 ServiceModel 客户端配置部分中,找不到引用协定“WebServiceTest.WebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素
原文 http://blog.csdn.net/bugdemo/article/details/9083497 主题 技术 在引用WebService后,程序运行到实例化WebService时报错, ...
- iOS网络编程--NSConnection的同步连接与异步连接
// // ZFViewController.m // 0628-表单验证 // // Created by zfan on 14-6-28. // Copyright (c) 2014年 zfan. ...
- linux chromuim安装常用插件(flash,手势,拖拽,广告屏蔽)
1.本机kali2.0 64位,kali基于Debian.文章所用的所有插件请到http://files.cnblogs.com/files/yuuyuu/chromium_plugins.tar. ...
- 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...
- Eclipse 中的重构功能
Eclipse 中的重构功能使其成为了一个现代的 Java 集成开发环境 (IDE),而不再是一个普通的文本编辑器.使用重构,您可以轻松更改您的代码,而不必担心对别处造成破坏.有了重构,您可以只关注于 ...
- 在mac os下的Apache服务器的cgi中运行python
我是搬运工.. Running Python Programs on the Mac OS X Apache Web Server The Mac OS X operating system incl ...
- Codeforces Round #275 Div.1 B Interesting Array --线段树
题意: 构造一个序列,满足m个形如:[l,r,c] 的条件. [l,r,c]表示[l,r]中的元素按位与(&)的和为c. 解法: 线段树维护,sum[rt]表示要满足到现在为止的条件时该子树的 ...