20165305 苏振龙《信息安全系统设计基础》第一周学习总结

第一章:计算机系统漫游

一、信息=二进制(位串)+上下文

二、C语言代码转汇编代码命令:gcc -S hello.i -o hello.s

三、源程序翻译过程:源程序文本 → 预处理器(预处理) → 编译器(编译) → 汇编器(汇编) → 链接器(链接) → 可执行目标程序(二进制)

四、了解编译系统工作原理的益处:

1、优化程序性能

2、理解链接时出现的错误

3、避免安全漏洞

五、系统的硬件组成

1、总线:传送定长字节块。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。

2、I/O设备:是系统与外部世界的联系通道。每个I/O 设备都通过一个控制器或适配器与I/O 总线相连。

3、主存:主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。存储器是一个线性的字节数组,每个字节都有其唯一的地址。

4、处理器(CPU):中央处理单元。具有加载、存储、操作、跳转过程。

六、存储设备形成层次结构:主要思想是上一层的存储结构作为低一层存储器的高速缓存。

第七章:链接

1.链接相当于一个整合,将各部分整合成一个单一的可执行的文件的过程。 2.为了构造可执行任务,链接器必须完成两个任务: 符号解析、重定位 3.目标文件的三种形式: (目标文件就是字节块的集合) 可重定位目标文件; 可执行目标文件; 共享目标文件。 4.符号和符号表 由m定义的可被其他模块引用的全局符号; 其他模块定义的可被m模块引用的全局符号(外部符号); 只被m模块定义与引用的本地符号。 常用命令: 预处理:gcc -E -I hello.c -o hello.i 编译:gcc -S -I hello.i -o hello.s 汇编: gcc -c -I hello.s -o hello.o 链接:gcc hello.o -o hello

Myod任务详情

1 复习c文件处理内容

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

  1. main与其他分开,制作静态库和动态库

  2. 编写Makefile

5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

6 在博客园发表一篇博客,重点写遇到的问题和解决过程

遇到的问题:不会编写Makefile文件,所以我问了一些同学再加上自己的理解才算做出来。

源代码:

1#include<stdio.h> 2#define N 100 //数组最大长度 3 4main() 5{ 6 int a[N]; 7 8char b; 9int s; 10for(s=0;s<N;s++) 11 { 12 scanf("%d%c",&a[s],&b); //输入数字和符号 13 if(b=='#') //输入时“#”结束 14 break; 15 } 16 insertsort(a,s); //函数调用 17 return 0; 18} 19 20void insertsort(int a[],int n) 21{ 22 int i=0,temp=0,j=0; 23 if(n>9){ //数组最小长度 24 for(i=1;i<=n;i++) //实现插入排序 25 { 26 temp=a[i]; //将要插入的数据保存到temp中 27 for(j=i-1;a[j]>temp;j--) 28 a[j+1]=a[j]; //数据后移 29 a[j+1]=temp; //插入 30 } 31 } 32 33 for(i=0;i<=n;i++) 34 { 35 printf("%d ",a[i]); 36 } 37}

测试1-vi

  1. 每个*.c一个文件,每个*.h一个文件,文件名中最好有自己的学号

  2. 用Vi输入图中代码,并用gcc编译通过

  3. 在Vi中使用K查找printf的帮助文档

  4. 提交vi编辑过程截图,要全屏,包含自己的学号信息

测试2-gcc测试

  1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码

  2. 生成的可执行文件中要有自己的学号

  3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

测试3-gdb测试

  1. 用gcc -g编译vi输入的代码

  2. 在main函数中设置一个行断点(2,3一张图)

  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点

  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

测试4-静态库的测试

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

测试5-共享库

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

测试6-Makefile

1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.

2 提交Make过程截图,要全屏,包含自己的学号信息

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )