Fd

1、标准输入输出和错误

linux下使用标准输入文件stdin和标准输出文件stdout,来表示每个命令的输入和输出,还使用标准错误输出文件stderr用于输出错误信息。三个标准流都与系统与控制终端设备相连(如:键盘)。

因此,在标准情况下,每个命令通常从相应的控制终端中获取输入,并将输出打印到控制终端屏幕上,如本题解题过程。也可以将程序重新定义,将stdin,stdout重定向。最基本的使用方法是定义到一个文件上,从一个文件获取输入,输出到另外的文件中。如read(),write()函数的使用。

2、文件描述符

在底层操作系统是不会通过文件指针来查找文件的,而是通过文件表示符来操作的。

文件标识符以一系列证书,从0开始依次递增。但是一般系统标识符都是从3开始的。

文件描述符0、1、2和终端相关。如果希望命令从文件中读取输入或输出到文件中,就需要使用文件重定向。

系统默认打开三个流:

文件描述符 缩写 描述
0 stdin 标准输入(命令的输入,缺省和终端键盘关联)
1 stdout 标准输出(命令的输出,缺省和终端屏幕关联)
2 stderr 标准错误输出(命令的错误信息输出,缺省和终端屏幕关联)

3、重定向标准输出

1
2
whoami > filename  #把命令标准输出重定向到一个文件中(如果文件存在,则内容覆盖)
whoami >> filename # 把命令标准输出重定向到文件中(尾部追加)

4、重定向标准输入

1
2
whoami < filename  # 以filename文件作为命令whoami的标准输入
whoami << DELIMITER # 从标准输入中读入输入,直到遇到DELIMITER分解符

5、重定向标准错误

1
2
whoami 2> filename # 把whoami命令的标准错误重定向到文件中(如果文件存在,则内容覆盖)
whoami >> filename # 把命令的标准错误重定向到文件中(尾部追加)

collision

1、\xc9 为字符串。使用python print后会输出?是因为计算机不识别的这个字符

2、大端序 or 小端序
端序:又称字节序、尾序、位序。在计算机领域是指机器存放多字节数据的字节顺序。在涉及到低层数据存储和网络数据传输研究中都会涉及端序。
大端序:高位字节放在内存的低地址,低位字节放在内存的高地址。
小端序:低位字节放在内存的低地址,高位字节放在内存的高地址。
例:int a = 0x12345678 从左到右字节位降低 两个数为一个字节 12是高位78是低位,字节位具有相对性。

1
2
3
4
5
6
7
8
9
10
11
12
大端序存放方式:
0x00000001           -- 12
0x00000002           -- 34
0x00000003           -- 56
0x00000004           -- 78 
地址位从低到高,字节位从高到低
小端序存放方式:
0x00000001           -- 78
0x00000002           -- 56
0x00000003           -- 34
0x00000004           -- 12 
地址位从低到高,字节位从低到高

3、lsb文件基本都是小端序文件

bof

1、gets(s)存在溢出
scanf遇到输出不能有空格,所以用gets输入字符串,但是gets出现了一个潜在问题,gets将不停地往s中塞东西,不管s的可用空间是否足够,就存在溢出漏洞问题,超过s空间长度会导致系统崩溃。

2、esp汇编中为栈顶置针,栈中数据都是从栈顶进入的。

栈顶
esp
s
ebp
返回地址
arg0

esp = s + ebp(4字节) + 返回地址(4)

flag

upx压缩文件

1
upx -d file  #upx解压文件

passcode

1、scanf(“%d”, &a)
scanf函数会把获取的值送到一个地址,如果不加&会把a的值当作地址传送。

待更新…