freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

详解pwn-内核相关知识(1)
星云博创 2021-05-27 10:45:37 83153

由于一些原因,从ctf退役之后,从web转pwn的过程中,研究了一下0.11版本的linux内核,发现了很多之前在web层面想不明白的知识,虽然说操作系统是底层了,但是随着学习的深入,发现里面确实还有很多更深入的知识。笔者想要写一个系列的内核知识,此篇为第一篇,可以说此系列会见证一个内核选手的成长吧,笔者也相信自己会一直坚持下去的。

此篇的主要内容有:处理器、大小端序、存储相关知识、linux中断机制的原理。

0x01:Linux基础

Linux 5.x:支持很多CPU架构,目前较流行的
X86_64:PC和服务器
ARM64:主要用于移动设备

1)  处理器

复杂指令集计算机:具有80%复杂指令很少用到。

精简指令集计算机:去掉了不常用的指令,大部分简单指令能在一个周期内完成。

2)大小端序

1byte=8bit

16、32位的寄存器,寄存器宽度大于1字节,就会存在如何安排多字节的问题。

因此产生了大端序和小端序:

1、大端模式:高字节保存在内存的低地址
2、小端模式:高字节保存在内存的高地址
大小端序模式在处理器访问内存时用于描述:寄存器的字节顺序和内存中的字节顺序之间的关系。
v2-3ea5de19af3fd04bed5738f21321183b_720w.png
这两种都是读取0x12345678

可以看到:

大端序模式下地址的增长顺序和值的增长顺序相同。

小端序模式下地址的增长顺序和值的增长顺序相反。

如何判断CPU是大端序还是小端序:

联合体特性:存放顺序是所有成员从低地址开始存放。
代码解释:

v2-e3e6f1cf64bb866e6fbd2c48cd66f8ce_720w.pngv2-3adc23049b73b7b81193f75b02ecc7f8_720w.png

根据上面的图,一幕了然。

3)存储读写指令的全过程

CPU架构流水线:取指、译码、执行、数据内存访问、写回。

现代处理器:采用了超标量架构和乱序执行---->提高了指令级的并行效率、增加整个高速缓存和内存层次结构的实现难度。

存储---读---写:

指令首先进入流水线前端(预取、decode)
经过分发和调度进入执行单元,最后提交执行结果。
指令采用顺序方式通过前端,采用乱序方式进行发射,乱序执行,顺序方式提交执行结果。

最终结果更新到加载-存储队列中。

0x02:Linux中断机制

目的:

1. 硬件中的中断响应---->内核驱动中的中断

2. 系统调用的函数响应sys_call----->系统调用

3. 自定义中断------->软件的软中断模式(下断点)

4. 信号中断------>了解信号使用创建

5. 系统的异常和错误------>系统的异常获取      了解异常作用

分类:

硬件中断、软件中断

硬中断:由电脑中主机的8259A类似的硬件中断控制芯片发出的中断

ARM中断控制器发出的中断

软中断:异常

第一类:CPU 自行保留的中断

第二类:系统调用异常

代码结构:

kernel 中

asm.s                       trap.c

system_call.s                 fork.c      signal.c    exit.c    sys.c

中断的工作流程:

做CPU工作模式的转化

进行寄存器的拷贝和压栈

设置中断异常向量表

保存正常运行的函数返回值

跳转到对应的中断服务函数上运行

进行模式的复原以及寄存器的复原

跳转回正常工作的函数地址继续运行

v2-6397ac1beaefd99dbff5ba01cd26578c_720w.png

中断前的处理过程,中断恢复过程,中断的执行过程
硬件中断的处理过程 asm.s trap.s
软件及系统调用的处理过程    system_call.s fork.c    signal.c    exit.c    sys.c

v2-da0dca51e9c511d5842995397b37afdc_720w.pngv2-a3c0c93b71582ee652f6dca18f4adf9e_720w.png
v2-46e8c72edcf4deea29866e7a14065b93_720w.png

0x03:小结

在文章末尾附上了源码,同时预告一下,下篇文章将与读者一起剖析kernel中的汇编源码,以及C语言程序。

最后附上笔者的联系方式:3202085600@qq.com,希望能够与大家一起交流。

_divide_error:pushl $_do_divide_errorno_error_code:xchgl %eax,(%esp)pushl %ebxpushl %ecxpushl %edxpushl %edipushl %esipushl %ebppush %dspush %espush %fspushl $0    # "error code"lea 44(%esp),%edxpushl %edxmovl $0x10,%edxmov %dx,%dsmov %dx,%esmov %dx,%fscall *%eaxaddl $8,%esppop %fspop %espop %dspopl %ebppopl %esipopl %edipopl %edxpopl %ecxpopl %ebxpopl %eaxiret
# pwn
本文为 星云博创 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
星云博创 LV.7
星云博创科技有限公司
  • 96 文章数
  • 76 关注者
【技术分享】记某项目漏洞挖掘
2024-01-16
【技术分享】短信验证码的相关利用方法与技巧
2023-11-23
【技术分享】业务逻辑漏洞案例剖析
2023-10-18
文章目录