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位的机器上产生 ...
随机推荐
- 在类库项目中使用log4net(RollingFileAppender)记录日志
1.创建解决方案 2.创建类库项目 3.根据需要修改命名空间,修改(和/或)添加类到类库 4.引用log4net 5.类库项目根目录下创建leg4net配置文件,如D3CallTriggerPlugi ...
- C#输入输出重定向
当 Process 将文本写入其标准流中时,通常将在控制台上显示该文本.通过重定向 StandardOutput 流,可以操作或取消进程的输出.例如,可以筛选文本.用不同方式将其格式化,也可以将输出同 ...
- jQuery DataTables 行获取
datatables的官方例子中似乎没有提到表格双击和获取相应行号的功能; 经过探索可以按照以下方式实现: $("#example tbody tr").dblclick(fun ...
- Spring中Template模式与callback的结合使用浅析
Spring不论是与ibatis,还是与Hibernate的结合中,都使用到了Template模式与callback技术,来达到简化代码实现的目的.Template模式也即模板模式,用于对一些不太变化 ...
- Nginx的安装与使用
在 CentOS 7 系统上: $ sudo rpm --import http://nginx.org/keys/nginx_signing.key $ sudo rpm -ivh http://n ...
- 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句
如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...
- 烂泥:LVM学习之LVM基础
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 有关LVM的好处我就不在此多介绍了,有空的话自己可以去百度百科中看看.我们在此之进行LVM的相关操作,以及命令的学习. 要想使系统支持LVM,我们必须安 ...
- 移动语义 && 函数调用过程中的 lvalue
当以一个函数内的临时变量对象作为另一个函数的形参的时候,原函数内的临时对象即 rvalue,就会成为此函数内的 lvalue. 这样会重新导致效率低下,因为造成了大量复制操作. <utility ...
- Storm wordcount Read from file
source code: package stormdemo; import java.io.BufferedReader; import java.io.BufferedWriter; import ...
- 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)
1. Animation动画 在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimati ...