20155212 2017-2018-1 《信息安全系统设计》第2周课堂实践

1-VI

  1. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
  2. 用Vi输入图中代码,并用gcc编译通过
  3. 在Vi中使用K查找printf的帮助文档
  4. 提交vi编辑过程截图,要全屏,包含自己的学号信息
    1043723-20170928072831184-1728659341.png
  • 相关知识
    • vi的使用
  • 截图
    1043723-20170928072950950-183278290.png

2-gcc测试

  1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码
  2. 生成的可执行文件中要有自己的学号
  3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
  • 相关知识
    • ESC---ISO
  • 截图
    1043723-20170928073121106-598141946.png

3-gdb测试

  1. 用gcc -g编译vi输入的代码
  2. 在main函数中设置一个行断点
  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  • 相关知识
    • 要调试代码在用gcc编译时必须加上-g参数
    • 使用gdb设置断点
      • 行断点
      • 临时断点
      • 函数断点
      • 条件断点
  • 截图
    1043723-20170928074049044-487292164.png

4-静态库的测试

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

5-共享库

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

6-MyOD

  1. 复习c文件处理内容
  2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
  3. main与其他分开,制作静态库和动态库
  4. 编写Makefile
    5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
  • main.c
#include <stdio.h>
#include <string.h>
#define MAXDATA 1024

int main(int args, char **argv)
{
    FILE *fp;
    long chnum;
    if((fp=fopen(argv[1], "r"))==0)
    {
        printf("文件为空");
        exit(0);
    }

    char data[MAXDATA];
    int i=0;
    char ch;

    while((ch=fgetc(fp))!=EOF)
    {
        if(i<MAXDATA)
        {
            data[i++]=(char)ch;
        }
    }
    chnum=i;
    odfunction(chnum,data);
    fclose(fp);
    return 0;
}
  • odfunction.c
int odfunction(int num, char data[])
{
    int i,j;
    for(i=0; i<num; i=i+4)
    {
        if(i%16==0)
        {
            printf("\n%07o\t\t", i);
        }
        printf(" %02x%02x%02x%02x\t", data[i+3], data[i+2], data[i+1], data[i]);
        if((i+4)%16==0)
        {
            printf("\n\t  ");
            for (j = i - 12; j < i+4 ; j++)
            {
                if ((int)data[j] == 10)
                {
                    printf(" \\");
                    printf("n ");
                }
                else
                {
                    printf("  %c ", data[j]);
                }
            }
        }
        if(data[i+4]==0)
        {
            printf("\n\t   ");
            for(j = i-i%16; data[j-3] != 0; j++)
            {
                if((int)data[j] == 10)
                {
                    printf(" \\");
                    printf("n  ");
                }
                else
                {
                    printf(" %c ", data[j]);
                }
            }
            break;
        }
    }
    printf("\n%07o\n", i+2 );
}
  • Makefile
MyOD2: main.c odlib.so
    gcc -o MyOD2 main.c ./odlib.so
odlib.so: odfunction.c
    gcc -shared -fpic -o odlib.so odfunction.c
MyOD1: odlib.a main.o
    gcc -static -o MyOD1 main.o ./odlib.a
main.o: main.c 
    gcc -c main.c
odlib.a: odfunction.o
    ar rcs odlib.a odfunction.o
odfuncitopn.o: odfuntion.c
    gcc -c odfuntion.c
  • 截图
    1043723-20171001093410856-1990056909.png

7-Makefile

  1. 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
  2. 提交Make过程截图,要全屏,包含自己的学号信息
  • Makefile
testmymath: main.c add.c sub.c mul.c div.c
    gcc -Og -o testmymymath main.c add.c sub.c mul.c div.c
  • 截图
    1043723-20171001093639028-361480247.png

码云链接

转载于:https://www.cnblogs.com/dky20155212/p/7604804.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值