2019-2020-1 20175227 《信息安全系统设计基础》第二周学习总结
作者:互联网
2019-2020-1 20175227 《信息安全系统设计基础》第二周学习总结
教材学习内容总结
- 二进制在计算机中的重要地位
- 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
- 三种数字表示:
- 无符号编码:基于传统的二进制表示法,表示非负数。
- 补码编码:表示有符号整数的最常见的方式。
- 浮点数编码:表示实数的科学计数法的以2为基数的版本。
- 信息存储:
- 字长
- 机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器。存储器的每个字节都能由唯一的数字来标识,称为地址。字长用来指明整数和指针数据的标称大小,虚拟地址空间的大小由字长决定,对于一个字长为w位的机器而言,虚拟地址的范围为0-2^w-1。
- 寻址和字节顺序
- 对于跨越多字节的程序对象,必须建立两个规则:
- 对象的地址是什么
- 在存储器中这些字节如何排列
- 对于跨越多字节的程序对象,必须建立两个规则:
- 大端法&小端法:
- 最低有效字节在最前面的方式称为小端法
- 最高有效字节在最前面的方式称为大端法。
- 大多数Intel兼容机都只用小端模式;许多较新的微处理器是双端法,两种方法均可配置。
- 字节顺序可见的三种情况:
网络应用程序代码编写时必须遵循已建立的关于字节顺序的规则
反汇编器显示(确定可执行文件所表示的指令序列的工具)
编写规避正常的类型系统的程序时,可以使用强制类型转换来允许一种数据类型引用一个对象
使用sizeof来确定对象使用的字节数,sizeof(T)返回存储一个类型为T的对象所需字节数。
- 字长
可以把编译过程分成四步,以编译hello.c生成可执行文件hello为例,如下图:
- 预处理:
gcc –E hello.c –o hello.i
gcc –E调用cpp - 编 译:
gcc –S hello.i –o hello.s
gcc –S调用ccl - 汇 编:
gcc –c hello.s –o hello.o
gcc -c 调用as 链 接:
gcc hello.o –o hello
gcc -o 调用ld- GDB
- UNIX及UNIX-like下的调试工具。GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。
- 功能
- 启动程序,可以设置运行环境和参数来运行指定程序
- 让程序在指定断点处停止执行
- 对程序作出相应调整,这样就能纠正一个错误后继续调试
- 注意使用
-g
编译选项的gcc命令来编译源程序 - 命令
- Makefile
- 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
- 功能
- 启动程序,可以设置运行环境和参数来运行指定程序
库是共享程序代码的方式,一般分为静态库和动态库。
- 静态库
- 程序编译一般需经预处理、编译、 汇编和链接几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库。
- 特点:
- 可执行文件中包含了库代码的一份完整拷贝
- 缺点:
- 被多次使用就会有多份冗余拷贝。
- 动态库
- 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。Windows下动态库为.dll后缀,在linux下为.so后缀。
- 二者区别
- 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
- 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
教材学习中的问题和解决过程
无
代码调试中的问题和解决过程
- 问题1:编译c文件时,提示警告信息
问题1解决方案:不需要注意警告信息,不会影响编译结果
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
无
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 51/51 | 1/1 | 8/8 |
参考资料
- 《深入理解计算机系统V3》学习指导
- https://blog.csdn.net/weixin_30394333/article/details/99319515
- https://www.jianshu.com/p/090e1c0310ab
标签:gcc,字节,程序,DLL,编译,20175227,2019,2020,hello 来源: https://www.cnblogs.com/zxy20175227/p/11609678.html