在进行实现进程和线程的实现之前,我们先处理几个之前遗留下来的问题。
分页后跳转处理
之前的实现中遗留了一个问题,就是我们开启分页后执行流还是在物理地址的恒等映射的前4MB上的,并没有切换到高虚拟地址处执行。这里我们先实现一下一开启分页就跳转到对应地址。这里我选择的是重新布局kernel.c,并将入口设置为kernel_init函数,从而一加载kernel就初始化堆管理并开启分页,之后我们...
这里借鉴slab/slub分配器的思想,往最简单实现一个内核堆分配器。之前我们已经用buddy
system实现了物理内存分配器(PMM),也开启分页机制,可以利用虚拟地址。因为PMM分配内存是以页(4KB,0x1000)为粒度的,如果申请一小块结构体的内存就需要申请一整页的内存就过于浪费,所以slab分配器的核心功能是分配远小于一页大小的内存。
主体分配逻辑
从PMM中申请到的一页内...
这里开始我了解到其实可以选择用GRUB作为bootloader来加载入自制的内核,不过既然我打算从零开始实现一个学习用的操作系统,这里就用自己写的bootloader。实际上我一开始实现的bootloader还有些小问题可以优化。
bootloader优化
启用A20总线
之前我们实现的bootloader并没有手动启用A20总线,这里对
https://wiki.osdev.org...
在一开始打pwn时我们就接触过plt表和got表这两个用来动态加载libc函数的重要部分,不过当时我对其理解只限于got表在经过一次调用函数后,里面存着的就是libc中的具体函数指针;而plt表则是我们调用一个函数时事先跳转到的地方,其会跳转到对应got表位置处存的地址。现在我们来学一下是经过了一个什么过程才把真正的函数指针填到got表中,并深入分析一下哪里存在可以利用的点。
其中我们在I...
Initializaion战队WP
排名34,队员collectcrop,w2194167366,cjyxx
web-nest_js
进入没找到什么有用信息(第一次进的时候这个界面都没加载出来,于是dirsearch扫描了)发现了/login
输入东西点立即登录发现没有反应,于是bp抓包查看
如果用户名或密码错误会显示Invalid
credentials,这里猜测用...
这里我们的目标是实现一个32位的操作系统,所以后面介绍相关的内容默认都是32位下的。
基本概念
IDT表
中断描述符表 ( IDT ) 用于告知 CPU中断服务程序(ISR)
的位置(每个中断向量对应一个)。它的结构类似于全局描述符表(GDT)。
IDT的结构是由 CPU
架构规范定义的,所以对于某一类 CPU(比如
x86),结构是固定的。IDT 的结构必须符合 CPU
要...
基础概念
实模式与保护模式
特性
实模式(Real Mode)
保护模式(Protected Mode)
CPU 架构
最初 8086
从 80286 起支持
最大寻址内存
1MB
4GB(32位)或更高(64位)
位宽
16 位
32 位(或后来的 64 位)
内存访问方式
段:偏移(Se...
深入理解modprobe_path提权方式
源码分析
我们在调用execve去执行一个程序时,实际上会先检查目标文件是否是一个可执行文件,
以linux-5.15.153版本的内核源码为例,我们的目标调用链主要为do_execve->do_execveat_common->bprm_execve->exec_binprm->search_binary_handl...
一、战队信息
战队名称:Initialization
战队排名:12
二、解题情况
三、解题过程
web-Signin
直接看代码
12345678910111213141516171819202122232425262728293031323334353637383940414243# -*- encoding: utf-8 -*-'''@F...
复杂程序fuzz初探
什么是fuzz
Fuzz(Fuzzing,模糊测试)是一种自动化测试技术,用于发现程序中的漏洞或异常行为。它的核心思想是向程序输入大量随机、畸形(fuzzed)或异常的数据,观察程序的响应,以检测潜在的崩溃、内存泄漏、安全漏洞等问题。适用于二进制程序测试和Web
渗透测试。结合代码覆盖率分析和符号执行,现代 Fuzzing
工具能够高效发现程序中的安全漏洞,在
...