您的位置:首页 > 其它

20145204《信息安全系统设计基础》第2周学习总结

2016-09-25 17:54 369 查看

20145204《信息安全系统设计基础》第2周学习总结

教材学习内容总结

第一章
•编译器驱动程序

源程序:利用编辑器创造并保存的文本文件。以hello程序为例,文件名是hello.c。

源程序——>可执行文件的转换是由编译器驱动程序完成。

在unix系统上的命令是```gcc –o hello hello.c。

其中分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。

最后运行可执行文件的命令:./hello。

•系统的硬件组成

1.总线。

总线是贯穿整个系统的一组电子管道,携带信息字节并在各个部件之间传递。

2.I/O设备。系统与外界世界的联系通道。例如:键盘、鼠标、显示器,以及存储数据和程序的磁盘。

3.主存。临时存储设备,在处理器执行程序时,用来存放程序和处理的数据。

4.处理器。中央处理单元(CPU),简称处理器。执行存储在主存中指令的引擎。其核心是一个字长的寄存器。CPU的主要操作:加载,即将信息从主存复制到寄存器。存储,即将信息从寄存器复制到主存。操作,将两个寄存器的内容复制到ALU,ALU对两个字做算术操作,结果存放到一个寄存器中。跳转,从指令中取出一个字复制到程序计数器中。

·高速缓存器:用于存放处理器近期可能会处理的信息数据,提高程序性能。

第七章后面内容有涉及。

vi的基本操作

·最基本文本编辑
1.光标移动:h:光标左移;j:光标下移;k:光标上移;l:光标右移。

2.字符编辑:将光标移动到需要修改的字符位置,x键:删除该字符;i键:在光标前添加某字符。

3.文本编辑:无论光标放在哪里,。A键:都会在末尾连续添加字符

4.退出:输入,q!:放弃所有改动;wq:保存改动。

5.删除类命令:dw:当前光标处到下一个单词开始处删除。de:当前光标到单词结束。d$:当前光标到行末。

·编译:

·编译单个程序:以hello为例

1.
gcc hello.c -o hello


2.运行:
./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调试

· GDB最基本的命令有:(注意使用GCC编译时要加“-g”参数。)

0.gdb programm(启动GDB)

1.l 列出源码,相当于list

2.b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)

·行断点:break line

·函数断点:break function

·条件断点:break line if 条件

·临时断点:tbreak

3.run 开始运行程序

4.bt 打印函数调用堆栈

5.p 查看变量值

6.c 从当前断点继续运行到下一个断点

7.n 单步运行

8.s 单步运行

9.quit 退出GDB

在实验的过程中发现实验楼给出的程序返回div总是0,以此为例调试:



1.
gdb main
进入gdb并输入命令
l
显示程序:

2.输入命令
break div
,
run
等命令查看发现在进入函数时a=16,b=2,函数参数未丢失,但是结果返回却是0,考虑是否是强制转换数据类型的问题。



3.修改div.c文件,添加
double s=(double)a/b,return s
,调试显示s结果正确但还是最后结果有问题



4.最后就只能是函数返回值的问题?

·makefile

Makefile的一般写法:



试着将add.c……等程序makefile(注意使用Tab键):



·生成静态库math.h,共享库math.so

· 生成静态库:

1.生成目标文件
gcc -c add.c sub.c mul.c div.c


2.生成静态库:
ar rcs math.a add.o sub.o mul.o div.o


·生成共享库

1.生成目标文件:
gcc -fpic -c add.c sub.c mul.c div.c


2.生成共享库:
gcc -shared -o math.so add.o sub.o mul.o div.o


以下是步骤过程图,在最后用ls显示当前目录的文件可以看见静态库和共享库生成。



学习中遇到的问题与解决方法

· 在git搭建远程仓库后出现以下的问题:无法推送一些条引用到git……,使用+master也无法推送



解决办法:输入
git fetch origin master
,后继续输入:
git merge origin/master
实现从远程分支获取最新版本。最后成功推送。



· unbuntu安装vimtutor时出现错误:



解决办法:

利用ps aux查看进程



找到_apt的pid



使用sudo kill 杀死进程



·gdb问题

如果没有使用-g参数编译程序,gdb时就会出现下面问题:



· makefile问题:

1.不使用tab键,会出现如下错误。只需要将你空格的地方改为Tab键即可。



托管代码截图





学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标3500行30篇400小时
第一周100/1001/120/20
第二周200/3001/230/50

参考资料

Linux基础入门

Linux下C语言开发基础

...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: