第八周课上测试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 ...
随机推荐
- location.href 不响应的解决方法
在某些时候修改元素的值的时候过快会导致失效 1.window.open("","_blank") 代替 不过也是打开新窗口 2.延迟调用location.hr ...
- DLL编写中extern “C”和__stdcall的作用
动态链接库的使用有两种方式,一种是显式调用.一种是隐式调用. (1) 显式调用:使用LoadLibrary载入动态链接库.使用GetProcAddress获取某函数地址. (2) ...
- 基于jQuery头像裁剪插件cropbox
今天给大家分享一款基于jQuery头像裁剪插件cropbox,这是一款简单实用的jQuery头像在线裁剪插件.该插件适用于适用浏览器:IE8.360.FireFox.Chrome.Safari.Ope ...
- Excel 自定义关闭按钮
遇到过这样一个需求,是在excel关闭的时候,不要excel本身的保存窗口,只用自定义的. 这个的需要第一,是点击关闭时候触发, 第二:触发后,不能还是弹出那个窗口 第三:取消后,要能停止程序 为了弄 ...
- 使用模板方法模式简化JDBC操作
在使用JDBC时,会重复的写很多重复的代码,例如 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; S ...
- 重启php
注意这是重启php,不是重启apache service php-fpm restart
- css设置背景固定不滚动效果的示例
css设置背景固定不滚动效果的示例 背景固定不滚动各位看到最多的无非就是QQ空间了,我们在很多的空间都可以看到内容滚动而北京图片不滚动了,下文整理了几个关于背景固定不滚动css代码. 一.css设置背 ...
- create the web service by yourshelf
start cmd node demo.js var http = require('http'); http.createServer(function (request, response) { ...
- GUI的广泛应用是当今计算机发展的重大成就之一
GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用.人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口.菜单.按键等方式来方便地进行操作.而嵌入式GUI具有下面几 ...
- (转)android从应用到驱动之—camera(1)---程序调用流程
一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的ja ...