Pwn入门系列2——计算机内部数据存储格式

linux基础

①保护层级:分为四个ring0-ring3
②一般来说就两个,0和3
③0为内核
④3为用户

linux基础

①权限:用户分为多个组
②文件和目录权限一般都是三个,即可读可写可执行
③读:R,写:W,执行:X
④赋予一个可执行文件执行权限就是chmod+x filename

linux基础

①虚拟内存和物理内存
②物理内存很直白,就是内存中实际的地址
③虚拟内存就是物理内存经过MMU转换后的地址
④系统会给每个用户进程分配一段虚拟内存空间
⑤所以说我们调试的可执行程序的内存空间布局都差不多,但是是虚拟内存,不是实际物理内存。

linux基础命令

名称 作用 示例
ls 列出当前目录 ls
cd 切换目录 cd/home/ctf
pwd 打印当前路径 pwd
touch 创建空白文件 touch flag.py
mkdir 创建目录 mkdir /home/ctf
rmdir 删除目录 rmdir /home/ctf
rm 删除文件 rm flag
cp 复制文件 cp /home/ctf/flag /home/flag
mv 移动文件 mv flag /home/ctf/flag
cat 输出文件内容 cat flag
diff 比较两个文件信息 diff flag1 flag2
chmod 切换执行权限 chmod 777 elf1
locate 查找文件 locate flag

学会看源码

①linux是开源的,它的代码实现都可以找到
②我们研究linux的机制,最重要的武器就是源码
③分析源码是一个安全研究者必备的技能
https://elixir.bootlin.com
https://code.woboq.org

大端序和小端序

①计算机内部有两种数据的存储形式:大端序和小端序
②大端序:数据高位存储在计算机地址的低位,数据低位存储在计算机地址的高位
③小端序:数据高位存储在计算机地址的高位,数据低位存储在计算机地址的低位

文件描述符

①Linux系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已经被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。
②每个文件描述符会与一个打开的文件相对应,不同的文件描述符也可能指向同一个文件
③相同的文件可以被不同的进程打开,也可以在同一个进程被多次打开。

文件描述符

①我们会在open、read、write这些常见函数中见到
②0标准输入(标准输入)、1标准输出(stdout)、2标准错误(stderr)
③read(0,buf,size)从stdin中读size个数据到buf中。
④write(1,buf,size)从buf中取出size个数据到stdout中。

栈(stack)

①栈是一种数据结构,他是一种后进先出(LIFO)的数据结构
②栈的基本操作有两种:push(压栈)和pop(弹栈)
③由于函数调用顺序也是LIFO,所以我们能接触到的绝大多数系统,都是通过栈这一数据结构来维护函数调用关系。