20155322 2017-2018-1《信息安全系统设计》第八周学习/课上作业/课下作业


课上作业内容

作业一:

作业内容:

参考 在Linux下完成“求命令行传入整数参数的和”

  • 测试代码传入自己的8位学号

  • 上方提交代码

  • 附件提交运行测试截图

作业实现

  1. 题目分析:
  • 命令行传参
  • 循环求和
  1. 相关代码:
#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
  • 上方提交代码
  • 提交一个客户端至少查询三次时间的截图测试截图
  • 提交至少两个客户端查询时间的截图测试截图

作业实现

下载
csapp.h/csapp.c

课下作业:

课下作业一:

  • 完成家庭作业4.47,4.48,4.49
  • 相应代码反汇编成X86-64汇编
  • 把上述X86-64汇编翻译成Y86汇编,并给出相应机器码
    发操作过程、测试、问题解决过程博客链接

课下作业二:

  • 把课上练习3的daytime服务器分别用多进程和多线程实现成并发服务器并测试
  • 提交博客链接

本周结对学习情况

-20155302

  • 结对学习内容:
    • 教材第十一章
    • Y86汇编
    • 网络编程

代码托管

其他(感悟、思考等,可选)

参考资料

posted @ 2017-11-10 23:31  blackay03  阅读(502)  评论(1编辑  收藏  举报
Live2D
*/