赵文豪 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 ...
随机推荐
- 解决绝对定位div position: absolute 后面的<a> Link不能点击
今天布局的时候,遇到一个bug,当DIV设置为绝对定位时,这个div后面的相对定位的层里面的<a>Link标签无法点击. 网上的解决方案是在绝对定位层里面添加:pointer-events ...
- webstorm添加*.vue文件代码提醒支持webstorm支持es6vue里支持es6写法
本文转自:http://www.lred.me/2016/01/07/webstorm%E6%B7%BB%E5%8A%A0-vue%E6%96%87%E4%BB%B6%E6%94%AF%E6%8C%8 ...
- jquery遍历不同色彩的li
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Lintcode 9.Fizz Buzz 问题
------------------------ AC代码: class Solution { /** * param n: As description. * return: A list of s ...
- 用C#实现 查看exe所加载dll列表的功能
var p = System.Diagnostics. Process.GetProcessesByName("w3wp").First(); List<System.Dia ...
- Java研发岗位面试归类A(附答案)
题目来自http://www.codeceo.com/article/201-java-interview-qa.html,答案自己网上找的,如有疏漏,欢迎斧正.一起学习,共同进步. 一.Java基础 ...
- UE3名称结构(Name)
解释说明: (1) 直接通过FName的index进行比较来判断两个FName是否相等 (2) 通过FName的index从全局Names数组中取出对应的FNameEntry,可以获得FName的字符 ...
- 当年只会C# 所以写C++就成这样了! log4cplus -> log4net
属实C++不会. 目前帮朋友弄个小项目需要小折腾一下. c# 一直采用 log4net ,c++的呢,找找有个log4cplus 知识有限,做个通用类吧.别把精力放在这里. 动手创建个静态类. 为了 ...
- git学习(四):撤销修改和撤销删除
修改有两种情况 在工作区修改但没有add到暂存区 git checkout -- <file> 在工作区修改了也add到暂存区 git reset HEAD <file> 先撤 ...
- android开发读书笔记
第九章心得: HAL ( Hardware Abstraction Layer,硬件抽象腔,〉是建立在Linux驱动之上的一套翻字库.这套程序 j率并不属于 Linux 内核, 而是属于 Linux ...