zoukankan      html  css  js  c++  java
  • 20155219 2017-2018-1 《信息安全系统设计》第4周课堂实践

    第一题

    题目要求

    • 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
    • 用Vi输入图中代码,并用gcc编译通过
    • 在Vi中使用K查找printf的帮助文档
    • 提交vi编辑过程截图,要全屏,包含自己的学号信息
      image

    题目截图:

    image

    第二题

    题目要求

    • 用gcc 进行预处理,编译,汇编,链接vi输入的代码
    • 生成的可执行文件中要有自己的学号
    • 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

    题目截图:

    image

    第三题

    题目要求

    • 用gcc -g编译vi输入的代码
    • 在main函数中设置一个行断点
    • 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
    • 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

    题目截图:

    image
    imageimage

    第四题

    题目要求

    • 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
    • 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

    题目截图:

    imageimage

    第五题

    题目要求

    • 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
    • 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

    题目截图:

    第六题

    题目要求

    • 1.写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath,只用显式规则就可以
    • 2.提交Make过程截图,要全屏,包含自己的学号信息

    Makefile 基本规则

    1、打开的gvim环境中输入i进入编辑模式,输入代码,保存为prog.c、 code.c、 code.h文件

    2、输入vim Makefile,输入i进入编辑模式,输入代码并保存

    3、输入make,进行自动化编译

    4、执行./test查看结果

    题目截图:

    其中makefile中的内容为:

    testmymath: main.o add.o sub.o mul.o div.o
    
    gcc main.o add.o sub.o mul.o div.o -o testmymath
    
    main.o: main.c head.h
    
    gcc -c main.c
    

    因为我的四个加减乘除文件已经编译。所以其中不用再编译一次。

    过程中遇到了如下问题:

    missing separator stop
    

    通过百度得到答案
    :原因是tab格式错误导致 所在的行必须以tab开头。

    实践题目

    编写MyOD.c 用myod XXX实现Linux下od -tx -tc XXX的功能

    od的功能:

    od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
    选项-t:指定输出格式,格式包括a、c、d、f、o、u和x。
    参数x[SIZE]:十六进制,SIZE字节为单位以十六进制输出。
    od -tx XXX是以十六进制输出XXX的内容,默认以四字节为一组显示。(XXX中字符对应的ascii值的十六进制表示,且每四字节显示的顺序是字符从后向前的顺序)

    遇到的问题

    • 1.如何输出行号?

    通过观察发现,每行开头这串数字为八进制,数值为在本行之前的字符数。所以,只需在prinf()函数中格式化输出printf("%07o",参数)即可。

    • 2.发现程序无法显示“ ”的ASCII字符导致与od命令不完全相符?

    对读取的字符进行判断,如遇到“ ”,手动输出。要注意使用转义字符,即printf(" ")。对于最后一行的序号即为i的个数,是一个计数功能,其个数比字符数多1,因为将换行符也计入其中。
    但是仍出现如下错误,如图:

    想到一个方法:在每个字符输出之后做一个判断如果下一个字符输出是‘’,则手动输出‘ ’。但遇到如下错误,如图:

    仍在想解决办法。

    • 3.如何输出两行不同形式的字符

    在输出行号的同时使用一个for循环将刚刚输出的字符的ASCII码值再重新输出一遍。

    • 4.输出遇到如下问题,最后一行无法输出其ASCII码的值,如图:

    解决方法:在程序结尾处新加一个for循环,开头引入新的变量h,用于计数本行字符的个数。

    程序如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #define m 1000
    #define BUFFERSIZE 4096
    void Myod(char record[],int n)
    {
    	int i=0,k,j;
    	
    	for(k=0;k<n;k++)
    	{
    		if(k%16==0 && k!=n-1)
    		{
    			printf("%07o  ",k);
    			for(j=0;j<16 && i*16+j<n;j++)
    			{
    				printf("%02x  ",record[i*16+j]);
    			}
    			printf("
    ");
    			//i表示行数
    		}
    		else  
    		{
    			printf("         ");
    			for(j=0;j<16 && k!=n-1;j++)
    			{
    				if(record[i*16+j]=='
    ')
    			    {
    	                 printf("\n  ");
    				}
    				else if(record[i*16+j]=='	')
    				{
    					printf("\t  ");
    				}
       	            else
     				{
    					printf(" %c  ",record[i*16+j]);
    
    				}   
    			    k=i*16+j;
    			}
    			i++;
    			printf("
    ");
    			if(k==n-1)
    			{
    				printf("%07o  
    ",n);
    			}
    			
    		}
    	}
    }
    int main(int argc,char** argv)
    {
    	//struct utmp current_record;
    	char record[BUFFERSIZE];
    	int fd,m=0,j=0,k=0,i=0,flag=0;
    	int relen=sizeof(record);
    	if((fd = open(argv[1],O_RDONLY)) == -1)
    	{
    		perror( argv[1]);
    		exit(1);
    	}
    	while(read(fd,&record[i],1)!=0 )
    	{
    		i++;//i表示读入的字符个数
    	}
    	//for(k=0;k<i;k++) printf("%c ",record[k]);
    	Myod(record,i);
    	close(fd);
    	return 0;
    }
    

    最终截图:

    码云链接!

  • 相关阅读:
    Android开发之动态设置字体的样式和粗细
    Android开发之炫酷MD风格
    Android开发之自定义Dialog简单实现
    Android开发之自定义Toast(带详细注释)
    【Android优化篇】提升Activity加载速度的方法
    android使用Pull解析来自服务器的xml文件时出现错误以及解决方案
    Image augmentation for machine learning experiments
    LibreCAD
    C++ library to read and write DXF/DWG files
    DXF-Viewer
  • 原文地址:https://www.cnblogs.com/paypay/p/7609884.html
Copyright © 2011-2022 走看看