第八周课上测试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 ...
随机推荐
- Atitit.ide代码块折叠插件 eclipse
Atitit.ide代码块折叠插件 eclipse 1. User Defined Regions #region ... #endregion 插件com.cb.eclipse.foldin ...
- PHP截取中文字符串不出现?号的解决方法[原创]
PHP截取中文字符串不出现?号的解决方法[原创] 大 | 中 | 小 [不指定 -- : | by 张宴 ] [文章作者:张宴 本文版本:v1. 最后修改: 转载请注明出处:http://blog.z ...
- 工作流Activiti的学习总结(十二) activiti官方十分钟快速学习 (zhuan)
http://topmanopensource.iteye.com/blog/1315341 ***************************************************** ...
- oracle 函数判断字符串是否包含图片格式
首先是写一个分割字符串的函数,返回table类型 CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARC ...
- jquery ajaxSubmit
<script type="text/javascript" src="jquery/jquery.js"></script></ ...
- 手把手教做Excel直方图
手把手教做Excel直方图 2017-10-05 作者:ExcelHome 阅读:71968次 直方图是用于展示数据的分组分布状态的一种图形,用矩形的宽度和高度表示频数分布,通过直方图,用户可 ...
- IIS 与 Apache共存
http://support.microsoft.com/kb/813368 http://www.blueidea.com/computer/system/2006/3585.asp 操作其实也很简 ...
- 简单实现Spring中BeanFactory原理
上一篇文章介绍了Java反射机制在Spring IOC中的应用,知道了BeanFactory底层的实现原理. 原理搞懂了,对Spring IOC理解起来也很容易. 先来看看Java代码获取Spring ...
- maven配置nexus
setting配置: <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the ...
- Java中的阻塞队列(BlockingQueue)
1. 什么是阻塞队列 阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附 ...