测试-1-ch03

  1. 任务详情
  • 通过输入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函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码
  1. 知识点
  1. 测试截图

测试-2-ch03

  1. 任务详情
  • 通过输入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)的值和栈的变化情况。提交照片,要有学号信息。
  1. 知识点
  • 参考GDB调试汇编堆栈过程分析,使用gcc - g XX.c -o XX -m32指令在64位的机器上产生32位汇编
  • 使用gdb XX指令进入gdb调试器
  • gdb相关指令
    • r:运行
    • b n:在n行设置断点
    • i r:查看各寄存器的值
    • disassemble:获取汇编代码
  1. 过程

    • 查看f函数的汇编代码、
    • 入栈
    • 将上一个函数的基址入栈,从当前%esp开始作为新基址
    • 为传参做准备
    • 实参入栈
    • 计算short+int
    • pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节
    • ret指令将栈顶弹给%eip
    • 用leave指令恢复
  2. 变化情况
指令 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的更多相关文章

  1. 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试

    目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...

  2. 20165305 苏振龙《Java程序设计》第八周课上测试补做

    1. 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截图 2. ...

  3. 第六周课上测试-1-ch02

    第六周课上测试-1-ch02 1. 要求: 1.参考附图代码,编写一个程序 "week0601学号.c",判断一下你的电脑是大端还是小端. 2. 提交运行结果"学号XXX ...

  4. 第六周课上测试-3-ch02补充作业

    实验要求: 编写一个程序 "week0603学号.c",运行下面代码: short int v = -学号后四位 unsigned short uv = (unsigned sho ...

  5. 2018-2019-1 20165330 《信息安全系统设计基础》第六周课上测试ch02&课下作业

    课上测试 测试-3-ch02 任务详情 编写一个程序 "week0203学号.c",运行下面代码: 1 short int v = -学号后四位 2 unsigned short ...

  6. 第八周课上额外项目:pwd的实现

    项目要求: 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 并且上交博客链接. 实验步骤 我首先不懂pwd到底是个 ...

  7. 20162328蔡文琛 大二 十二周课上测试 hash

  8. 20155325 2017-2018 1 课上测试、课下作业、实验——码云&博客链接汇总 《信息安全系统设计基础》

    第二周-课上 码云 https://gitee.com/bestiisjava2017/XinXiAnQuanXiTongSheJiJiChu20155325thl/tree/master/0927 ...

  9. # 第五周课下测试(ch03)补交

    第五周课下测试(ch03)补交 1.( 多选题 | 1 分) 有关gdb调试汇编,下面说法正确的是() A . 可以用disas反汇编当前函数 B . 以16进制形式打印%rax中内容的命令是 pri ...

随机推荐

  1. CentOS安装使用git

    yum install git yum install git-gui (可选) git config --global user.name "gg" git config --g ...

  2. 使用Crypto++库的CBC模式实现加密(二)

    前面已经有一篇介绍使用Crypto++库实现的加密的文章了,但是代码中考虑的不完全,所以就重新发了个二 C++封装: #include "zyaes.h" #include < ...

  3. java 代理模式,观察者模式

    代理模式1 import <a href="http://lib.csdn.net/base/17" class='replace_word' title="Jav ...

  4. Windows Phone实用教程:利用Blend为程序添加设计时数据

    [前言] Blend自诞生那一天起就伴随这开发者如此的评价: 有VS还用Blend干啥,直接码代码就好了. Blend会生成一堆垃圾无用代码,很不爽. 对于这类我只会在心里评价,当你并不真正了解一样事 ...

  5. 2017年网站安全狗绕过WebShell上传拦截的新姿势

    本文来源:https://www.webshell.ren/post-308.html 今天有一位朋友发一个上传点给我 我一看是南方cms 有双文件上传漏洞 本来可以秒的 但是看到了 安全狗 从图片可 ...

  6. 关于报错“syntax error near unexpected token `”和回车换行

    本来是很简单一个事情,转过来是因为打字机这事比较有趣…… http://blog.csdn.net/xyp84/archive/2009/08/11/4435899.aspx 摘要一下: 回车 换行 ...

  7. msyql的内存计算

    本文将讨论MySQL内存相关的一些选项,包括: 单位都是b,不是kb,即1B=1/(1024*1024*1024)G 1)全局的buffer,如innodb_buffer_pool_size: 2)线 ...

  8. nginx 的 autoindex on首页不显示的问题 按照下面几行要写上不然不行

    [root@test html]# vim ../conf/nginx.confworker_processes  1;events {    worker_connections  1024;}ht ...

  9. easy UI动态赋值

    1,首先怎么清除这个值 $('#filegrid').datagrid('loadData', { total: 0, rows: [] }); 2,清除后,通过post提交请求,怎么将新植穿进去,这 ...

  10. go json解析

    JSON转换库为 encoding/json 把对象转换为JSON的方法(函数)为 json.Marshal(),其函数原型如下 func Marshal(v interface{}) ([]byte ...