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位的机器上产生 ...
随机推荐
- linux crontab & 每隔10秒执行一次
linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINU ...
- LVS入门
说到大型网站的架构,就必然要谈到LVS.LVS即:Linux Virtual Server,是由国人章文嵩博士所创立的,已经被加入到了Linux 2.6的内核模块中了.官方网址: http://www ...
- Mathout
1. 用Maven搭建Mahout的开发环境,并完成PPT 26页,最简单的例子.要求有过程说明和截图. 2. 用案例的数据集,基于Mahout,任选一种算法,对任意一个女性用户进行协同过滤推荐,并解 ...
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Golang tips ----- 函数
1.在函数调用时,Golang没有默认参数值 2.一个函数声明如果没有函数体,表面该函数不是由Golang实现的,这样的声明定义了函数标识符 3.拥有函数名的函数只能在包级语法块中被声明 4.函数值( ...
- selenium如何操作cookies实现免登录
执行接口测试或者某些自动化测试时,为了避免每次访问接口都需要登录操作,可以用访问接口时,把cookies信息传过去. 思路是先登录一次页面,获取到cookies信息,把cookies信息保存到本地文件 ...
- DFS cdoevs 3100 蜗牛
cdoevs 3100 蜗牛 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在 ...
- 分析循环 Analysis of Loops-------geeksforgeeks 翻译
之前我们讨论了渐进分析,最佳最坏平均情况的分析以及渐进符号.在这一篇中我们分析一下迭代的简单程序. 1. O(1): 如果程序中没有包含任何的循环,递归或者任何的非常数时间的函数,我们就说这个程序的时 ...
- HDU 4782 Beautiful Soup --模拟
题意: 将一些分散在各行的HTML代码整理成标签树的形式. 解法: 模拟,具体见代码的讲解. 开始没考虑 '\t' .. 代码: #include <iostream> #include ...
- sizeof 和 strlen 的区别
sizeof 和 strlen 都是c/c++ 中常见的符号,他们的功能是判断数组长度.那么他么到底有什么区别 1.sizeof 不是函数,而是一个操作符.字节数的计算在程序编译时进行,而不是在 ...