20155322 2017-2018-1《信息安全系统设计》第八周学习/课上作业/课下作业
课上作业内容
作业一:
作业内容:
参考 在Linux下完成“求命令行传入整数参数的和”
-
测试代码传入自己的8位学号
-
上方提交代码
-
附件提交运行测试截图
作业实现
- 题目分析:
- 命令行传参
- 循环求和
- 相关代码:
#include "stdio.h"
#include "stdlib.h"
int main(int argc, char **argv) {
int sum = 0;
int i = 0;
char c;
for(i;i<argc;i++) {
//c = argv[i];
//printf("%d ",(int)c);
sum = sum + atoi(argv[i]);
//sum = sum + (int)c - 30;
printf("%s ",argv[i]);
}
printf("The sum is : %d\n",sum);
return 0;
}
作业二:
作业内容:
- 把第一个练习中的代码在X86-64(Ubuntu)中反汇编,给出汇编代码和机器码的截图
- 把X86-64汇编翻译成Y86-64汇编,并给出相应机器码的截图(使用附件中的Y86-64模拟器)
- 关于Y86:
- 程序员的可见状态:寄存器、存储器、条件码、PC和程序状态。
- 8个寄存器,每个寄存器存储32位
- 条件码是一个二进制的寄存器
- pc记录当前正在执行的指令的地址
- Y86可使用虚拟地址访问存储器
相关补充:Y86
- 关于Y86:
- 程序员的可见状态:寄存器、存储器、条件码、PC和程序状态。
- 8个寄存器,每个寄存器存储32位
- 条件码是一个二进制的寄存器
- pc记录当前正在执行的指令的地址
- Y86可使用虚拟地址访问存储器
- 基本指令
-
halt :这个指令会停止指令的执行。在IA32中有个与之相当的指令 hlt,不过IA32的应用程序不允许使用这条指令,因为它会导致整个系统暂停运行。而对于Y86来讲,执行 halt 指令会导致处理器停止,并将状态码设置为 HLT。
-
nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。
-
xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。
-
OPl:这包括4个整数操作指令,addl、subl、andl和xorl。他们只对寄存器数据进行操作。
-
jXX:包括7个跳转指令,jmp,jle,jl,je,jne,jge,jg。根据分支指令的类型和条件码的设置来选择分支。
-
cmovXX:包括6个条件传送指令,cmovle,cmovl,cmove,cmovne,cmovge和cmovg,只发生在两个寄存器之间,不会将数据传送到存储器。
-
call:指令将返回地址入栈,然后跳到目的地址。
-
ret:call是过程调用,ret是返回。将返回地址入PC,并跳到返回地址。
-
pushl和popl:指令实现了地址的入栈和出栈
-
作业实现:
- 将第一个作业中的代码进行反汇编,这个比较简单,不在赘述:
- 安装Y86模拟器:
解压后我使用make命令安装,发现无法使用模拟器,我在网上找到解决方案,进行安装:
参考Y86模拟器和ubuntu12.04 安装CS:APP Y86模拟器
安装bison flex:
sudo apt-get install bison flex
安装Tcl/Tk :
sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5
解压压缩包后,修改makefile文件,将下列几句话修改,目的是修改路径,方便gcc找到库:
GUIMODE=-DHAS_GUI
TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5
TKINC=-I/usr/include/tcl8.5
在sim文件下运行以下指令(makefile):
make clean
make
-
相关截图:
-
将X86-64汇编翻译成Y86-64汇编:
作业三:
作业内容:
- 基于socket使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
服务器响应消息格式是
客户端IP:XXXX
服务器实现者学号:XXXXXXXX
当前时间: XX:XX:XX
- 上方提交代码
- 提交一个客户端至少查询三次时间的截图测试截图
- 提交至少两个客户端查询时间的截图测试截图
作业实现
课下作业:
课下作业一:
- 完成家庭作业4.47,4.48,4.49
- 相应代码反汇编成X86-64汇编
- 把上述X86-64汇编翻译成Y86汇编,并给出相应机器码
发操作过程、测试、问题解决过程博客链接
课下作业二:
- 把课上练习3的daytime服务器分别用多进程和多线程实现成并发服务器并测试
- 提交博客链接
本周结对学习情况
- 结对学习内容:
- 教材第十一章
- Y86汇编
- 网络编程