首页 > 系统相关 >pwn的linux基础(计算机内部数据结构存储形式)

pwn的linux基础(计算机内部数据结构存储形式)

时间:2024-07-06 11:58:23浏览次数:11  
标签:文件 存储 小端序 描述符 地址 linux pwn 数据结构

linux基础

保护层级:

分为四个ring0-ring3
一般来说就两个,0和3
0为内核
3为用户 

权限:

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

虚拟内存和物理内存:


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

Linux基础命令 

学会看源码


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

大端小端序

Iinux数据存储的格式为小端序

速记口令:大端序:高低低高

                  小端序:高高低低


计算机内部有两种数据的存储形式:大端序、小端序

大端序:数据高位存储在计算机地址的低位,数据低位存储在地址的高位

小端序:数据高位存储在计算机地址的高位,数据低位存储在地址。

例子:

以一个数据:0x0123456789abcdef为例,
0为低地址,7为高地址。

大端序存储

按照大端序的原则,数据最高位01存储在低位,最低位ef存储在高位,

将此数据按照字符串输出,得到的为:\x01\x23\x45\x67\x89\xab\xcd\xef

小端序存储

按照小端序的原则,数据最高位01存储在高位,.最低位ef存储在低位。

将此数据按照字符串输出,得到的为:\xef\xcd\xab\x89\x67\x45\x23\x01 

小端序

linux是小端序,所以如果我们以字符串的形式输入一个数字时,要注意格式
比如输入0xdeadbeef这个数字
字符串输入就是”xeflxbelxadlxde”传入给程序
好在有pwntools,p32(0xdeadbeef)即可完成自动转换 (32=4个字节(ef be ad de)x8)

文件描述符

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

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

栈(stack)


栈就是个阉割版的数组,只能在一头操作,为什么不直接用数组呢?
一把菜刀可以干很多事情,切菜刮皮剁骨头。
但是在刮皮的时候我们还是会选择用刮皮刀,原因很简单,更方便

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

linux中的栈

在linux系统中,系统为每一个进程都安排了一个栈,进程中每一个调用的函数都有自己独立的栈帧(栈里的一段区域)

在linux系统中,栈是由高地址向低地址生长
高地址为栈底,低地址为栈顶
我们接触到的一些算法,很多都是用栈来实现的,比如DFS,
DFS会将发现的节点存储在栈中,然后访问的顺序就是LIFO,
但是很多这种LIFO的算法都会以递归的形式实现,
其实,递归的形式实现这些算法本质上来说也是利用栈结构,只不过他没有在程序中另外申请一个栈,而是用的函数调用栈。

标签:文件,存储,小端序,描述符,地址,linux,pwn,数据结构
From: https://blog.csdn.net/2301_80361487/article/details/140225284

相关文章

  • Linux关于数据库,群集,缓存加速等精捡面试题
    目录第一部分:企业网站架构部署与优化..................................................61.列举几种常见的HTTP状态码?及各种代表的含义?................................62.HTTP请求方法有哪些?请至少列举三种,并简述它们的用途。........................63.HTTP协......
  • Linux 干货:新手村全攻略,老手也不容错过
    以下是一篇详细的关于Linux系统的文章,涵盖了基础概念、常用命令、系统管理、网络配置、安全措施等多个方面,旨在提供全面的Linux知识。希望这些干货能对你有所帮助。掌握Linux:从基础到进阶Linux是一种开源的操作系统,广泛应用于服务器、开发环境、嵌入式系统等多种场景。了解......
  • Linux系统apt命令基础使用方法
    目录一.前言二.什么是apt命令三.apt命令基础用法四.修改apt软件包源一.前言apt命令相当强大,这篇文章只是介绍一些基础用法。二.什么是apt命令apt是一个软件包管理工具,主要是在Ubuntu和Debian系统中使用,可以用来对软件进行安装等操作,需要超级管理员(root)权限进行操作......
  • linux下mysql安装、授权、创建用户、连接navicat、连接entity
    1.linux下安装mysql:sudoapt-getupdatesudoapt-getinstallmysql-serversudosystemctlstartmysqlsudomysql_secure_installation#这一步不是必须的,甚至有害的2.授权usemysql;updateusersethost='%'whereuser='root';flushprivileges;grantall......
  • 初学者指南:如何选择嵌入式Linux和单片机(MCU)
    前言在嵌入式系统开发领域,选择合适的平台是项目成功的关键之一。对于初学者来说,如何在嵌入式Linux和单片机(MCU)之间做出选择可能是一项艰巨的任务。本文将详细解释这两种平台的特点、优缺点,以及在不同应用场景中的适用性,帮助初学者做出明智的选择。嵌入式Linux简介概述嵌入......
  • Linux系统的基础知识和常用命令
    1、什么是Linux?是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。......
  • Linux学习前置,红帽Linux系统安装
    前置:下载:VMwareWorkstationPro17,以及所需要使用的Linux版本;  安装VMwareWorkstation;安装:进入VMware后选择新建虚拟机: 选择Linux和redhat9版本; 选择使用网络地址转换 接下来选择推荐的设置就好;选择新建磁盘 虚拟机创建好后在设备一栏里单击CD/DVD(SATA)......
  • Linux基础
    目录Linux所需工具:VMWareWorkStation虚拟机的网络模式网络相关知识物理地址(Mac)地址,IP地址(IPaddress)子网掩码(NATMARSK)IP分配方式(获取IP的方式)DNS(domainnameserver)域名解析服务网关(gateway)Linux操作系统windowsmacoslinuxredhat红帽系统(收费)centos(源代码和红帽......
  • Linux Mint 22,代号为“Wilma”。
    以原文为准:LinuxMint22ReleaseNotes-LinuxMint  以下只是简单翻译,学习记录LinuxMint22是一个长期支持版本,将被支持到2029年。它带有更新的软件,并提供了许多改进和新特性,以使您的桌面体验更加舒适。**LinuxMint22"Wilma"****已知问题**1.**关机超时**  ......
  • Linux remoteproc子系统(基于STM32MP157)概览
    remoteproc(RemoteProcessorFramework)用于管理异构远程处理器设备。这些设备通常在非对称多处理(AsymmetricMultiProcessing,AMP)配置中,可能运行不同的操作系统实例,包括Linux或其他实时操作系统的变体。remoteproc框架允许不同平台或架构控制远程处理器(例如,开启电源、加载固件......