zoukankan      html  css  js  c++  java
  • 2018-2019-1 20165232 第八周课下作业

    第八周课上测试补做

    题目二

    • 把第一个练习中的代码在X86-64(Ubuntu)中反汇编,给出汇编代码和机器码的截图
    • 把X86-64汇编翻译成Y86-64汇编,并给出相应机器码的截图(使用附件中的Y86-64模拟器)

    过程:

    终端输入gcc -E sum.c -o sum.i
    终端输入gcc -S test.1.i -o main.s
    用cat sum.s查看汇编代码,objdump -d sum命令查看机器码
    

    image

    1. 安装bison和flex词法分析工具:
    sudo apt-get install bison flex
    

    image
    2. 安装tcl/tk:

    sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5
    
    1. 下载并解压sim.tar压缩包,下载地址( http://labfile.oss.aliyuncs.com/courses/413/sim.tar)。

    输入命令

    wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
    

    下载,接着输入命令tar -xvf sim.tar解压sim压缩包。

    image
    4. 打开sim中的Makefile,修改mkaefile文件
    image
    5. 进入sim目录,终端输入make clean和make。

    再输入

    ./psim -t -g ../y86-code/asum.yo
    

    image

    题目三

    • 基于socket 使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
    • 服务器响应消息格式是
    客户端IP:XXXX
    服务器实现者学号:XXXXXXXX
    当前时间: XX:XX:XX
    

    过程

    • client.c
    #include "./csapp.h"
    
    int main(int argc, char **argv) 
    {
        int clientfd, port;
        char *host, buf[MAXLINE];
        rio_t rio;
    
        if (argc != 3) {
    	fprintf(stderr, "usage: %s <host> <port>
    ", argv[0]);
    	exit(0);
        }
        host = argv[1];
        port = atoi(argv[2]);
    
        clientfd = Open_clientfd(host, port);
        Rio_readinitb(&rio, clientfd);
    
        while (Fgets(buf, MAXLINE, stdin) != NULL) {
    	static char timestr[40];
        time_t t;
        struct tm *nowtime;
        time(&t);
        nowtime = localtime(&t);
        strftime(timestr,sizeof(timestr),"%Y-%m-%d %H:%M:%S",nowtime);
        printf("client IP:127.0.0.1
    ");
        printf("number:20165232
    ");
            printf("now:%s
    ",timestr);
            printf("
    ");
        Rio_writen(clientfd, buf, strlen(buf));
            Rio_readlineb(&rio, buf, MAXLINE);
            Fputs(buf, stdout);
    
        }
    
        Close(clientfd); //line:netp:echoclient:close
        exit(0);
    }
    
    • server.c
    #include "./csapp.h"
    
    void echo(int connfd,char *haddrp);
    
    int main(int argc, char **argv) 
    {
        int listenfd, connfd, port;
        socklen_t clientlen;
        struct sockaddr_in clientaddr;
        struct hostent *hp;
        char *haddrp;
        if (argc != 2) {
    	fprintf(stderr, "usage: %s <port>
    ", argv[0]);
    	exit(0);
        }
        port = atoi(argv[1]);
    
        listenfd = Open_listenfd(port);
        while (1) {
    	clientlen = sizeof(clientaddr);
    	connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen);
    
    	/* Determine the domain name and IP address of the client */
    	hp = Gethostbyaddr((const char *)&clientaddr.sin_addr.s_addr, 
    			   sizeof(clientaddr.sin_addr.s_addr), AF_INET);
    	haddrp = inet_ntoa(clientaddr.sin_addr);
    	printf("server connected to %s (%s)
    ", hp->h_name, haddrp);
    
    	echo(connfd,haddrp);
    	Close(connfd);
        }
        exit(0);
    }
    void echo(int connfd,char *haddrp) 
    {
        static char timestr[40];  
        time_t t;  
        struct tm *nowtime;
        time(&t);  
        nowtime = localtime(&t);  
        strftime(timestr,sizeof(timestr),"%Y-%m-%d %H:%M:%S",nowtime);
        size_t n; 
        char buf[MAXLINE]; 
        rio_t rio;
    
        Rio_readinitb(&rio, connfd);
        while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) { //line:netp:echo:eof
    	//printf("server received %d bytes
    ", (int)n);
    	printf("service IP:%s
    ",haddrp);
    	printf("number:20165232
    ");
    	printf("now:%s
    ",timestr);
    	printf("
    ");
    	Rio_writen(connfd, buf, n);
        }
    }
    
    • 编译时,csapp.c和server.c,client.c分别同时编译,结果如下
      image
  • 相关阅读:
    Java内部类详解
    Mac连接linux服务器
    mac 添加环境变量(jmeter添加至环境变量中)
    Charles使用断点修改返回或请求参数
    解决git clone速度慢的问题
    group by分组后获得每组中时间最大的那条记录
    使用Charles进行弱网测试
    http常见的状态码
    Mac使用Charles抓取ios手机APP中的https请求
    airtest使用poco方法的断言知识
  • 原文地址:https://www.cnblogs.com/heyanda/p/10051884.html
Copyright © 2011-2022 走看看