第八周课上测试ch03
测试-1-ch03
- 任务详情
- 通过输入
gcc -S -o main.s main.c,将下面c程序“week04学号.c”编译成汇编代码
int g(int x){ return x+3; } int f(int x){ int i = 学号后两位; return g(x)+i; } int main(void){ return f(8)+1; } - 删除汇编代码中 . 开头的代码,提交f函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码
- 知识点
- C语言调用机制使用了栈数据结构提供的后进先出的内存管理原则
- 参考资料C函数调用机制及栈帧指针
- 测试截图

测试-2-ch03
- 任务详情
- 通过输入
gcc -S -o main.s main.c,将下面c程序“week04学号.c”编译成汇编代码
int g(int x){ return x+3; } int f(int x){ int i = 学号后两位; return g(x)+i; } int main(void){ return f(8)+1; } - 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用
gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交照片,要有学号信息。
- 知识点
- 参考GDB调试汇编堆栈过程分析,使用
gcc - g XX.c -o XX -m32指令在64位的机器上产生32位汇编 - 使用
gdb XX指令进入gdb调试器 - gdb相关指令
- r:运行
- b n:在n行设置断点
- i r:查看各寄存器的值
- disassemble:获取汇编代码
- 过程
- 查看f函数的汇编代码、

- 入栈

- 将上一个函数的基址入栈,从当前%esp开始作为新基址

- 为传参做准备

- 实参入栈

- 计算short+int

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

- ret指令将栈顶弹给%eip

- 用leave指令恢复

- 查看f函数的汇编代码、
- 变化情况
| 指令 | eip | ebp | esp | eax | 栈 |
|---|---|---|---|---|---|
| push %ebp | 0x80483e6 | 0xbfffef58 | 0xbfffef50 | 0xb7fbcdbc | 0x8048411 0x8 0x0 |
| mov %esp,%ebp | 0x80483e7 | 0xbfffef58 | 0xbfffef4c | 0xb7fbcdbc | 0xbfffef58 0x8048411 0x8 0x0 |
| sub $0x10,%esp | 0x80483e9 | 0xbfffef4c | 0xbfffef4c | 0xb7fbcdbc | 0xbfffef58 0x8048411 0x8 0x0 |
| movl $0xc,-0x4(%ebp) | 0x80483ec | 0xbfffef4c | 0xbfffef3c | 0xb7fbcdbc | 0x8048441 0xb7fbb3dc 0x80481ec 0x8048429 |
| pushl 0x8(%ebp) | 0x80483f3 | 0xbfffef4c | 0xbfffef3c | 0xb7fbcdbc | 0x8048441 0xb7fbb3dc 0x80481ec 0x1e |
| call 0x80483db | 0x80483f6 | 0xbfffef4c | 0xbfffef38 | 0xb7fbcdbc | 0x8 0x8048441 0xb7fbb3dc 0x80481ec |
| add $0x4,%esp | 0x80483fb | 0xbfffef4c | 0xbfffef38 | 0xb 11 | 0x8 0x8048441 0xb7fbb3dc 0x80481ec |
| mov %eax,%edx | 0x80483fe | 0xbfffef4c | 0xbfffef3c | 0xb 11 | 0x8048441 0xb7fbb3dc 0x80481ec 0x1e |
| mov -0x4(%ebp),%eax | 0x8048400 | 0xbfffef4c | 0xbfffef3c | 0xb 11 | 0x8048441 0xb7fbb3dc 0x80481ec 0x1e |
| add %edx,%eax | 0x8048403 | 0xbfffef4c | 0xbfffef3c | 0x1e 30 | 0x8048441 0xb7fbb3dc 0x80481ec 0x1e |
| leave | 0x8048406 | 0xbfffef58 | 0xbfffef50 | 0x29 41 | 0x8048411 0x8 0x0 |
| ret | 0x8048417 | 0xbfffef58 | 0xbfffef58 | 0x2a 42 | 0x0 |
第八周课上测试ch03的更多相关文章
- 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试
目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...
- 20165305 苏振龙《Java程序设计》第八周课上测试补做
1. 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截图 2. ...
- 第六周课上测试-1-ch02
第六周课上测试-1-ch02 1. 要求: 1.参考附图代码,编写一个程序 "week0601学号.c",判断一下你的电脑是大端还是小端. 2. 提交运行结果"学号XXX ...
- 第六周课上测试-3-ch02补充作业
实验要求: 编写一个程序 "week0603学号.c",运行下面代码: short int v = -学号后四位 unsigned short uv = (unsigned sho ...
- 2018-2019-1 20165330 《信息安全系统设计基础》第六周课上测试ch02&课下作业
课上测试 测试-3-ch02 任务详情 编写一个程序 "week0203学号.c",运行下面代码: 1 short int v = -学号后四位 2 unsigned short ...
- 第八周课上额外项目:pwd的实现
项目要求: 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 并且上交博客链接. 实验步骤 我首先不懂pwd到底是个 ...
- 20162328蔡文琛 大二 十二周课上测试 hash
- 20155325 2017-2018 1 课上测试、课下作业、实验——码云&博客链接汇总 《信息安全系统设计基础》
第二周-课上 码云 https://gitee.com/bestiisjava2017/XinXiAnQuanXiTongSheJiJiChu20155325thl/tree/master/0927 ...
- # 第五周课下测试(ch03)补交
第五周课下测试(ch03)补交 1.( 多选题 | 1 分) 有关gdb调试汇编,下面说法正确的是() A . 可以用disas反汇编当前函数 B . 以16进制形式打印%rax中内容的命令是 pri ...
随机推荐
- Struts2初学 Struts.xml详解二
A.使用继承实现设置全局视图 package节点中还可以设置全局的视图,如: <global-results> <result name="e ...
- zookeeper单节点windows下安装
由于需要在windows下面安装zookeeper,故做个整理 1.下载zookeeper http://mirrors.hust.edu.cn/apache/zookeeper/ 2.解压 3.修改 ...
- 找电影资源最强攻略,知道这些你就牛B了!
找电影资源最强攻略,知道这些你就牛B了! 电影工厂 2015-07-01 · 分享 点击题目下方环球电影,关注中国顶尖电影微杂志 我们也许没有机会去走遍千山万水,却可以通过电影进入各种各样的角色来 ...
- 每日英语:A Better Way To Treat Anxiety
Getting up the nerve to order in a coffee shop used to be difficult for 16-year-old Georgiann Steely ...
- 利用MapReduce实现数据去重
数据去重主要是为了利用并行化的思想对数据进行有意义的筛选. 统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重. 示例文件内容: 此处应有示例文件 设计思路 数据 ...
- Ubuntu 12.04下LAMP环境的搭建
首先 apt-get install update 一下 sudo apt-get install update 安装MySQL 的服务端和客户端 sudo apt-get install mysql ...
- Storm手写WordCount
建立一个maven项目,在pom.xml中进行如下配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...
- markdown 表格宽度调整
先在浏览器中看看 HTML是怎样的: 看起来似乎不错.回到 Markdown 上,在原表格前添加 CSS 代码,类似这样: <style> table th:first-of-type ...
- 关于Unity中的几何体,材质和FBX模型
一.创建几何体的类型 1: 创建平面 Plane;2: 创建立方体 Cube;3: 创建球体 Sphere;4: 创建胶囊体 Capsule;5: 创建圆柱体 Cylinder;6: 3D文字 3D ...
- 011杰信-创建购销合同Excel报表系列-4-建立合同货物(修改,删除):合同货物表是购销合同表的子表
前面的一篇文章做的是修改删除,这篇文章做的是合同货物的修改和删除. 业务功能如下: