Unix/Linux系统编程笔记(第一章)

 

学习过程:

1.安装Unix系统:

  由于之前学习过一些Linux/Unix基础,在mac电脑上许多的Unix命令也是可以使用,但由于更换电脑,下载了最常使用的kali作为Unix编程的基础。

  选择kali是因为自己曾经常使用,对其中一些命令和操作比较熟悉,且一些文件也曾是在上面编写的,以后一些事项可能也会用到。

  对于不同的Unix系统来说,其实他们的编程语言和命令都是大抵相同的,所以学习系统编程在哪个Unix基础的系统上不会有很大影响,只是使用体验的区别。

  老师推荐的openeuler也有其好处,在本周后我也会将其同样下载到电脑上并配置完成,这次的一些命令实现就先在kali上完成。

  找到一篇很详细的kali安装教程:(14条消息) 小白 虚拟机 kali_Linux安装 详细教程_热气_腾腾的博客-CSDN博客_kali linux 

  按照其中的步骤一步步即可下载好kali在电脑里,过程如图:

  

 

 

 

 

 

 

 

 

  

   最后记得使用sudo apt update和sudo apt upgrade命令更新。

  至此安装过程都比较简单,按照流程便可以轻易完成没有遇见问题,其中用户名为名称缩写tsx。

 

2.简单Unix命令的学习

  

 

 

   

  如图,如教材学习简单的ls,cd,vim命令:

  ls用于查看当前目录下的文件和文件夹,cd用于进入文件夹,其中cd ..用于退出该文件夹到上一级。vim用于查看并编辑各种文档。

  如图中,查看桌面,进入Fuzz文件夹,打开enter.sh shell脚本文件。

 

 

 

  如图,使用vim打开文件,输入i切换到插入模式,将光标移动至想要的位置,输入20201323tsx,然后输入:wq回车以保存修改。

  由于enter.sh是程序中的一部分脚本文件,为了保证程序的运行,最终还是:q!没有保存,强制退出了。

 

 

3.使用emacs进行程序查看编写和c语言程序的运行

  

 

 

 

  由于kali本身并不自带emacs,但可以便捷地通过apt install emacs来下载安装,安装完成后如图可以正常打开刚才的enter.sh文件。

  同时在书上学习到c语言程序的编译运行gcc等,这个在之前的学习过程中也使用过,比较熟悉。

 

 

 

 

  编写了简单的hello world程序,使用gcc编译,./a.out执行并显示在命令行。

 

4.GDB调试

 

  gdb调试涉及许多栈溢出栈地址的知识,重写了个和书上一样的程序:

 

 

 

 

 

   

  因为学习pwn的原因,在之前的学习中使用过很多次gdb调试,都是直接在命令行中完成查看,也使用过配置好的虚拟机更加清楚直观地显示栈空间,这里简单使用了命令行自带的gdb调试工具:

  先使用apt install gdb下载该工具。

  在sub函数处打上断点,执行程序到断点处,查看函数c的值,此时由于还没进入sub函数,c是未赋值的空变量,无法显示。

  打印g的值,由于g是全局变量,在先执行的main函数中将其赋值为了123,此时显示123。

  然后步进,打印出enter sub,此时u被赋值为4,continue继续执行直到程序结束,打印main exit。

  程序比较简单并没有体现一些栈空间的知识,正常应该b一些栈地址的,在以前的pwntools中也找过,程序比较复杂就没有尝试:

 

 

 

 

 

 

  根据书上,使用emacs打开程序并调试,其实命令都比较相似,并使用多窗口直观显示栈空间等。

 

 

 

 

 

 

 

 

 

 

 

知识点归纳:

  1. 系统编程的重点是各种进程的抽象概念

  2. Debian是专注于免费软件的Linux先行版

  3. Ubuntu是基于Debian的Linux线性表

  4. Linux是一个类Unix系统,在某种意义上,它是由各种最为流行的Unix系统组合而成

  5. Slackware linux发行版以高度可定制而著称,适合Linux高级用户使用

  6. 以”/“开头的路径名为绝对路径名,可通过cd命令进入其它路径

  7. linux的手册页保存哎标准/usr/man目录下

  8. Red Hat Linux和SUSE Linux是最早使用PRM文件格式的主要发行版
  9. 在/etc/sudoers文件中添加一行username ALL(ALL) ALL后用户可使用sudo

 

  有用的收获:

  1. 安装了kali linux系统

  2. 学习使用了ls,cd,vim等基础linux命令

  3. 学习使用了emacs这款程序的多项功能,学习使用了gcc的c语言程序编译运行功能

  4. 学习使用了gdb调试,可以动态观察程序运行

 

 

问题与解决思路:

  由于之前的经验,在本次学习中并没有遇到很多很困难的问题,但有一些很繁琐的流程:

  在使用emacs进行gdb调试的时候,出现read-only的错误,会让你选择是否将编译的二进制文件也设置为read-only,此时不管选择是否都会无限执行消耗cpu,最终肯定会崩。

  只能提前停止,在强制退出过程中会导致文件的损坏,不仅仅是编译后的test1文件,原本的1.c文件也会变得不可用,不可打开,后续的操作也都会失败。

  于是只能重新建1.c文件,重新打一遍代码,此时将其设置为所有程序可读写的权限便不会再出现此问题,之后我也新建了1.c的备份以免再次出现此情况。

  这里也可以看出emacs程序在gdb时可能会损坏原本的c文件,需要提前备份。(以后会注意)

 

 

posted on 2022-09-04 17:40  20201323谭顺心  阅读(59)  评论(0)    收藏  举报