• 2017-2018-1 学号20155209 《信息安全系统设计基础》第八周学习总结


    2017-2018-1 学号20155209 《信息安全系统设计基础》第八周学习总结

    课堂未完成的补做

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

    • 课堂实验代码:

    • 运行课堂实验代码截图:

    • 使用gcc -s -o he.s he.c 汇编代码

    • 由于使用的是Mac系统反汇编命令不同。

    • objdump的选项-S、-l十分方便。如果二进制文件中带有调试信息,可以将源代码、文件名和行号与汇编代码对应显示。

    • 在OSX上,对应的工具是otool。与“objdump -Sl”能力接近的命令是otool -tV。

    • otool教程博客

    • 输入otool -tV he.o得汇编代码。

    • 由于使用Mac系统不能使用Y86模拟器,具体问题如下:

    • y86模拟器需要修改makefile文件中的路径。

    • 查找Mac系统内路径发现文件名、文件夹中文件完全不同。

    • 由此在网上找到了一个在线的y86模拟器,之后的作业都用这个完成了。

    基于socket 使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端,服务器响应消息格式是“客户端IP:XXXX服务器实现者学号:XXXXXXXX当前时间: XX:XX:XX”上方提交代码提交一个客户端至少查询三次时间的截图测试截图提交至少两个客户端查询时间的截图测试截图

    • 编写server.c和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) {
            Rio_writen(clientfd, buf, strlen(buf));
            Rio_readlineb(&rio, buf, MAXLINE);
            Fputs(buf, stdout);
        }
        Close(clientfd);
        exit(0);
    }
    
    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);
            Close(connfd);
        }
        exit(0);
    }
    
    void echo(int connfd)
    {
        size_t n;
        char buf[MAXLINE];
        rio_t rio;
    
        Rio_readinitb(&rio, connfd);
        while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) {
            printf("客户端IP:127.0.0.1
    ");
            printf("服务器实现学号:20155209
    ");
            printf("server received %d bytes
    ", n);
            time_t t;
            time(&t);
            printf("当前时间:%s
    ",ctime(&t));
            Rio_writen(connfd, buf, n);
        }
    }
    
    • 运行代码并截图
  • 相关阅读:
    作品-系统-[原生开发]新蓝景CRM管理系统
    作品-网站-[二次开发]汇名惠商城
    js声明json数据,打印json数据,遍历json数据,转换json数据为数组
    js 鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层异步加载模式
    js转换数据类型为浮点型,并取两位小数点
    php判断是否是微信客户端的浏览器访问
    百度地图API地理位置和坐标转换
    php 对象中连贯执行方法
    php extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容
    php 获取远程图片保存到本地
  • 原文地址:https://www.cnblogs.com/lhyhahaha/p/7822963.html
Copyright © 2020-2023  润新知