第八周课上测试ch03

测试-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

原文地址:https://www.cnblogs.com/besty-zyx/p/9859360.html

时间: 2024-07-31 13:52:42

第八周课上测试ch03的相关文章

2018-2019-1 20165318《信息安全系统设计基础》第八周课上测试

2018-2019-1 20165318<信息安全系统设计基础>第八周课上测试 测试-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函

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

1. 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截图 2. 编写程序,查询世界上超过"你学号前边七位并把最后一位家到最高位,最高位为0时置1"(比如学号20165201,超过3016520:学号20165208,超过1016520)的所有城市列表,提交运行结果截图 3. 编写程序,查询世界上的所有中东国家的总人口 4. 编写程序,查询世界上的平均

2017-2018-1 20155318 《信息安全系统设计基础》第十周课上测试及课下作业

2017-2018-1 20155318 <信息安全系统设计基础>第十周课上测试及课下作业 课上测试 解析:填充消除了冲突不命中,对于x和y数组,只有在引用第0个和第4个元素的时候发生不命中.因而命中率为75%. 解析:高速缓存容量为2048,高速缓存结构为(( 32 ),8,8,32) 解析:不同层之间是以块为大小传输单元在层与层之间复制,空缓存的不命中叫强制性不命中或冷不命中 解析:存储器层次结构的每一层都缓存来自较低一层的数据.缓存存储器是分块的,数据总是以块为基本单位在每一层之间传递,

20155204 信息安全系统设计 第十周 课上测试补交

20155204 信息安全系统设计 第十周 课上测试补交 我的答案:D 我的答案:ACD 我的答案:ACD 我的答案:ABC 我的答案:ABCD 我的答案:A 我的答案:C 我的答案:C 我的答案:C 我的答案:ABD 我的答案:ABCD 我的答案:B 我的答案:A 我的答案:ABC 我的答案:C 我的答案:ACD 我的答案:BDE 我的答案:CE 我的答案:C 我的答案:ADEG 我的答案:BCD 总分:16

第八周课上内容补做

第八周课上内容补做 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 函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码. 结合C函数调用机制及栈帧指针中的实例,

20165305 苏振龙《Java程序设计》第七&#183;周课上测试补做

第十一章 ?如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run()方法中. ?如果想要加装主线程,就要创建 Thread 实例,要启动额外的主线程就是调用 Thread 实例的 start() 方法. ?主线程会从main()方法开始执行,直到main()方法结束后停滞JVM.如果主线程中启动了额外线程,默认会等待被启动的所有线程都执行完run()方法才终止JVM.如果一个Thead被表示为Daemon线程,在所有的非Daem

第十二周课上测试补做

相关的知识点 如何编程实现随机数 import java.util.*; class TestRandom { public static void main(String[] args) { Random random = new Random(); for(int i = 0; i < 10;i++) { System.out.println(Math.abs(random.nextInt())%10); } } } head -n 功能:head用来显示档案的开头至标准输出当中,默认hea

20165222第一周课上测试补做

对于带包程序的编译:注意javac -d 编译到一个文件夹内,然后java -cp 文件夹名 包名.类名. 我在调试带包代码的问题时,比如带包的Hello.java.发现进入src直接用javac Hello.java可以将其编译出来,但会出现下列情况, 导致包名无法编译出来,以致接下来一直无法运行出来.而通过javac -d则能编译出来并运行.结果如下 原文地址:https://www.cnblogs.com/20165222lixu/p/8543118.html

# 20155337 2017-2018 1 课上测试、课下作业、实验

20155337 2017-2018 1 课上测试.课下作业.实验 第一周 学习总结 第二周 课堂实践 第三周 学习总结 第四周 学习总结+myod 第五周 学习总结 课堂实践 第六周 学习总结 实验一 第七周 学习总结 实验二 第八周 加分项目pwd 第九周 学习总结 第十周 实验三 第十一周 学习总结