- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 ret2syscall
博客网址:点击这里 微信:18223081347 欢迎加群聊天 :452380935 这一次我们来深入分析下更难的栈溢出题目ret2syscall 首先还是先检查下的保护 [*] '/home/pwn/桌面/题目/ROP/ret2syscall' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No .
2022-05-26 14:48:17
800
2
原创 操作系统实现-外中断
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们来对中断中的外中断进行讲解,先给下中断的分类和中断号分配把。 中断号 分类 0x0-0x20 异常和非屏蔽中断 0x20-0x30 I/O设备引发的可屏蔽中断,比如键盘、时钟等外中断 0x30-0xff 软中断,比如常说的int 80系统调用 前面对异常进行了讲解,这次对外中断进行说明。我们下面以时钟中断举例,首先我们要知道的是,时钟中断是操作系统自己发.
2022-05-24 15:11:14
691
原创 函数调用栈
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这个分栏我们开始学习PWN,当然PWN也是自己的兴趣爱好,所以可能博客更新较慢,不好意思啦 前置知识 每个函数都有自己的栈帧,栈底用ebp,栈顶用esp,还有一个eip,表示即将执行的指令的地址,下面是栈的图示,是从高地址向低地址增长 函数的栈帧包括 函数的返回地址和参数 本地变量 调用前后上下文 因此比如一个main函数执行时候,ebp指向其栈帧底部,然后在函数运行时候随时push和p.
2022-05-15 09:47:10
362
原创 操作系统实现-中断及任务调度
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们来对内核进行完善,主要包括全局描述符的加载、任务调度、中断等 全局描述符的加载 我们回顾下,是不是在loader中有关于全局描述符的一些代码 prepare_protected_mode: cli; 关闭中断 ; 打开A20线 in al, 0x92 or al, 0b10 ; 第1位置1 out 0x92, al ; 加载GDT .
2022-05-14 19:51:50
722
原创 操作系统实现-printk
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们来实现最基础,也是最常见的函数print,大家都知道这个是可变参数函数,那具体怎么实现呢,我们慢慢来说吧 大家都知道我们常见的格式化输出函数printf里面有很多参数,比如 %[flags][width][.prec][h|l|L][type] %:格式引入字符 flags:可选的标志字符序列 width:可选的宽度指示符 .prec:可选的精度指示符 h|l|L:可选的长度修饰符.
2022-05-13 09:34:45
343
原创 操作系统实现-进入内核
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们正式进入内核,编写相关的内核代码,也就是kernel代码 数据类型定义 因为我们在内核中会使用一些数据,因此先提前定义一些数据类型 #define EOF -1 #define NULL ((void *)0) // 空指针 #define EOS '\0' // 字符串结尾 #define bool _Bool #define true 1 #define false 0 .
2022-05-12 09:40:09
540
原创 操作系统实现-loader
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 大家好呀,终于我们到了操作系统的loader部分了,loader也是操作系统中最重要的一个部分,承接上面的boot,启下下面的kernel,那我们就开始吧!!! 内存检测 在loader中,最重要的一点就是检测内存,检测一些系统参数,到时候给kernel使用,那么下面我们就介绍下loader中如何检测内存。还是一样,我们先看下检测内存的代码 detect_memory: ; 置为0 .
2022-05-11 09:59:31
346
原创 操作系统实现-boot.asm实现
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们进入操作系统实现的真实编码, 这一次主要是完善对boot.asm文件的全部实现,开始吧。。。 首先我们先来理一下boot.asm需要干什么 打印出Booting System... 实现磁盘读写 将后续的loader.asm所在的区域读入到0x1000处,然后跳转进入loader.asm程序 开始执行loader.asm程序(这一节我们下次实现) 实模式下的print 在我们平时.
2022-05-07 10:18:31
1137
原创 操作系统实现-简单热身
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这次对上次的boot.asm进行代码讲解,也可以对汇编的相关理论进行补充 boot.asm 主引导扇区位于硬盘的0柱面0磁头1扇区处,首先BIOS加电后,就会将主引导程序加载进来,然后执行 我们先看下boot.asm中有啥把 [org 0x7c00] ; 设置屏幕模式为文本模式,清除屏幕 mov ax, 3 int 0x10 ; 初始化段寄存器 mov ax, 0 mov ds, ax m.
2022-05-06 19:08:16
168
原创 操作系统实现-开发环境配置
这一次我们开始自己实现一个简单的操作系统,当然自己也是在看别人的视频进行学习,希望自己能从这个实验中学习到操作系统相关的知识 环境配置 环境配置 VMware ArchLinux VSCode nasm bochs qemu gdb VSCode远程连接 这个步骤就大家自行百度下把 boot.asm [org 0x7c00] ; 设置屏幕模式为文本模式,清除屏幕 mov ax, 3 int 0x10 ; 初始化段寄存器 mov ax, 0 mov ds, ax mov es, ax mov ss
2022-04-26 10:17:16
541
原创 muduo源码分析之回调模块
这次我们主要来说说muduo库中大量使用的回调机制。muduo主要使用的是利用Callback的方式来实现回调,首先我们在自己的EchoServer构造函数中有这样几行代码 EchoServer(EventLoop *loop, const InetAddress &addr, const std::string &name) : server_(loop, addr, name) , loop_(lo
2022-04-24 20:53:52
496
原创 muduo源码分析之TcpServer模块
这次我们开始muduo源代码的实际编写,首先我们知道muduo是LT模式,Reactor模式,下图为Reactor模式的流程图[来源1] 然后我们来看下muduo的整体架构[来源1] 首先muduo有一个主反应堆mainReactor以及几个子反应堆subReactor,其中子反应堆的个数由用户使用setThreadNum函数设置,mainReactor中主要有一个Acceptor,当用户建立新的连接的时候,Acceptor会将connfd和对应的事件打包为一个channel然后采用轮询的算法,指定将该
2022-04-24 20:52:50
448
原创 muduo源码分析之muduo简单运用
今天不先实现muduo项目,我们先来看下muduo库的基本使用,只有了解了如何用,才能在写代码的时候知道自己写的找个函数是干嘛的,实际上是怎么使用的这个函数。首先说简单点,就是定义一个Server,设置两个回调函数 // 回调连接相关的事件 void onConnection(const TcpConnectionPtr &conn); // 回调读写事件 void onMessage(const TcpConnectionPtr &conn, Buffer *buffer, Timesta
2022-04-22 14:59:56
1159
原创 muduo源码分析之Buffer
这一次我们来分析下muduo中Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们想象一下最简单的EchoServer服务器,客户端建立一个连接,以后服务器和客户端之间的通信都是通过这个connfd发送和接受数据,于是每一个connfd都应该有一个自己buffer,当我们发送数据太快,服务器发送的太慢,则服务器会将待发送的数据这个buffer中,所以这就是这个类的作用。我们先看下buffer的结构是什么: 我们这
2022-04-20 10:54:24
367
原创 muduo项目介绍
在上一个集群聊天服务器项目中,我使用了muduo作为网络库,然后主要实现了业务逻辑等,所以为了深入网络库的代码和实现,我跟着一位老师的代码去实现了muduo库的基本原理和作用,当然只是实现了主体的代码,有些细节便没有深究,以下是自己的目标: 从开源C++ muduo网络库,学习优秀的代码设计 掌握基于事件驱动和事件回调的epoll+线程池面向对象编程 实现TcpServer、TcpConnection、Poller、Chanel等重要部分 重写muduo核心组件,去依赖boost,用C++11重构 测试代
2022-04-20 10:53:40
1239
原创 redis服务器
这一次主要讲下redis中服务器这个结构体相关代码,主要从是代码层面进行讲解 redis服务器 redis服务器结构体主要代码在redis.h/redisServer,下面给出该结构体源码,可以看到源码中对该结构体定义很长,这一节我们一点点分析,当然有些地方可能我也理解不到位hhh // redis服务器实例 struct redisServer { char *configfile; /* 配置文件的绝对路径 */ int hz; /* serverCron() 每秒调用
2022-04-19 10:51:59
1408
原创 redis数据库
这一次主要是接着redis服务器接着进行代码讲解,因为redis服务器中包含大量的数据库,因为redis也对每个数据库设计了结构体 redis数据库 在上面redisServer中,有一个数组redisDb *db,这个数组中就是存放的是该服务器所有的数据库,redisDb就是数据库字段,redisServer中的dbnum就是该数组的大小 // redis服务器中每一个数据库都是这样一个实例 typedef struct redisDb { // 数据库键空间,保存着数据库中的所有键值对
2022-04-19 10:51:19
365
原创 redis数据结构附录
引言 本次对上一次的数据结构知识进行补充,主要有redis数据结构的相关应用场景和内存相关知识 引用计数-内存 redis中的对象回收机制是采用引用计数的方式,首先我们可以通过redis对象结构体代码可知 /* * Redis 对象 */ typedef struct redisObject { ... // 引用计数 int refcount; ... } robj; 上面表格是和引用计数字段相关的api 引用计数-共享 我们知道引用计数可以实现对象内存什么时候销
2022-04-19 10:50:22
935
原创 redis持久化
本次主要是对redis中著名的持久化策略进行代码层面描述,主要包括RDB持久化和AOF持久化 因为AOF文件的更新频率比RDB高,所以如果服务器开启AOF持久化,redis优先使用AOF文件还原,只有当AOF持久化关闭,才使用RDB文件进行还原 RDB持久化 RDB持久化主要有两个命令实现:SAVE和BGSAVE SAVE、BGSAVE SAVE会阻塞redis服务器,知道RDB文件创建完毕 void saveCommand(redisClient *c) { // BGSAVE 已经在执行
2022-04-19 10:49:49
837
原创 redis数据结构
引言 从本次开始,对Redis设计与实现进行阅读及相关读书笔记的记录。Redis版本为3.0 数据结构 简单动态字符串SDS sds数据结构位于sds.h/sdshdr /* * 保存字符串对象的结构 */ struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 数据空间 char buf[]; }; 相对于C语言的字符串,SDS的优点在于 常数复杂度获取字符串
2022-04-19 10:45:21
148
原创 关于本人
这里先自我介绍下: 本人是一名在读的机械研三学生,转行到计算机,准备2022年7月入职字节,有想转行的同学可以加我QQ(153604363),大家可以一起学习啦 为什么做这个博客 这个博客主要记录自己的后端学习记录和一些刷题记录,同时可能会写一些自己的心得感悟,也为自己后面学习有一个知识点仓库,因此可能博客的内容不那么专业,更多的是以我这个水平的同学之间参考 如果大家觉得博客内容还可以的,也希望可以帮忙转发给朋友啦。 自己的网址:www.shicoder.top 欢迎加群聊天 452380935 本文
2022-04-19 10:33:00
171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅