《Unix&Linux系统编程》第一、二章学习笔记
20201329 信息安全系统设计与实现 学习笔记①
作业信息
知识点总结:
1. unix&Linux系统:
首先通过网络查询到Linux系统区别于我们常用的Windows系统的区别,内核不同、价格不同、支持软件、操作方式以及文件格式不同。Linux系统以命令行为主,区分大小写。同时,所有以Linux内核为基础开发的系统都称为Linux系统,比如CentOS、Android、Ubuntu、Redhat等。基于这个了解后,在个人的Windows系统主机内需要安装虚拟机来运行Linux系统。
2. 虚拟机:
在个人的Windows主机上安装运行Linux系统需要通过安装虚拟机,这个可以按照网络上的教程来分别安装镜像文件和VMware。
3. Linux系统中的文本编辑器:
vim gedit emacs 三种不同类型的文本编辑器其中gedit、emacs采用GUI并且易于使用。
4. emacs文本编辑器的了解与使用:了解emacs菜单部分的功能
File:打开、插入、保存文件
Edit:查找、替换
Options:配置Emacs操作
Buffers:缓冲区选择和显示
Tools:编译源代码、执行二进制可执行文件和调试
C:自定义编辑c源代码
5. 执行程序开发步骤:
使用文本编辑器创建源文件,用gcc将源文件转换为二进制可执行文件。
了解知道C语言程序中的变量:全局变量、局部变量、静态变量、自动变量、寄存器变量。
问题解决:
1. 在虚拟机中下载安装并且使用emacs文本编辑器和使用:
Emacs编辑器在Linux系统中使用,因此在虚拟机中打开官网下载,按照官网的操作在终端中输入命令输入密码可以下载。
2. 虚拟机与主机之间复制粘贴的文本内容不能互通:
编辑虚拟机设置--选项--客户机隔离--勾选“启用复制粘贴”--继续运行此虚拟机,但是操作后发现本虚拟机已经勾选,另找其他方法。
3. 将C代码编译成汇编语言出现问题,无法转换:
(134条消息) Ubuntu 编译出现fatal error: bits/libc-header-start.h: No such file or directory_张志翔 ̮的博客-CSDN博客
上网查阅之后发现是环境没有完善造成的,通过执行以下命令来完善编译环境sudo apt-get install gcc-multilib
4. 将汇编语言转换为函数的过程中遇到问题,在终端中不知道输入什么命令转换。
可以生成一个s.o文件之后暂时无法转换
实验内容与截图:
1. 下载安装运行emacs文本编译器:
打开官网下载,按照官网的操作在终端中输入命令输入密码可以下载。
输入要新建的文本命令行,打开Emacs之后进行编辑操作,如图:
2. 执行程序开发:
(1)创建源程序,部分源代码:
t1.c:
int g = 100;
int h;
static int s;
main(int argc, char *argv[])
{
int a = 1; int b;
static int c = 3;
b = 2;
c = mysum(a,b);
printf("sum=%d\n",c);
};
t2.c:
extern int g;
int mysum(int x, int y)
{
return x + y + g;
}
(2)gcc转换二进制可执行文件:生成a,out文件
3. C语言编译为汇编代码:
-
#include <stdio.h> extern int B(); int A(int x,int y) { int d,e,f; d=4; e=5; f=6; f=B(d,e); }
-
编译完成后保存出现a.c文件
-
配置完善gcc编译环境
sudo apt-get install gcc-multilib
-
在终端中输入命令行:
cc -m32 -S a.c
在桌面生成汇编语言文件
4.用汇编代码实现函数:
-
汇编语言文件s.s
-
.global get_esp, get_ebp get_esp: movl %esp, %eax ret get_ebp: movl %ebp, %eax ret
心得感悟:
其实刚接触这本书有些迷茫,对于虚拟机里的一些操作有些反抗,但是跟着书本里的步骤和代码一步步进行,遇到卡壳的的=地方如果上网查询解决不了的话可以和同学舍友一起讨论,效率更高一些。因为时间的关系,在目前学习的过程中进度只暂时进行到书本第37页,剩下的还需要更多的时间来学习解决。
最大的收获就是在虚拟机终端中使用命令行来操作解决一些程序运行和结束,知道了更多的代码知识,理清楚了之前一直没有搞懂的Linux系统到底是个什么玩意儿。
以后还要更加努力的看书学习和代码编程。