开发操作系统(1)
今天准备开始学习开发操作系统了。
就叫它 XIAOJIOS 吧~
学习开发操作系统的原因呢,第一点还是因为咱们国家的一个情况,我还是希望掌握开发
OS
的一个技术的,第二点是因为很多操作系统的机制希望去学习一下,并且尝试自己编写一份。
这里参照一本书《30天自制操作系统》,主要也是跟着它学习的。
环境准备
今天主要用到两个工具:
NASM——基于英特尔 x86
架构的汇编与反汇编工具
qemu——开源免费的虚拟机程序
nas汇编文件的编译方式为:
1nasm xxx.nas -o xxx.img
qemu启动加载 img 文件的方式为:
1qemu-system-x86_64 -drive file=os.img,if=floppy
编写nas汇编文件
这里就用它给的吧,毕竟这个格式要说是自己写的我自己都不信。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647; hello.nas; TAB=4; 标准FAT12格式软盘 ...
Golang入门学习(15)
Go的第15课——锁、channel遍历、select 语句
sync.Mutex
基本
这个协程可以理解为多线程里面的线程。线程在操作临界资源的时候会产生竞争,锁可以避免发生竞争。
使用以下语法定义一个锁变量
1var lock sync.Mutex
lock.Lock()
可以为一个锁进行上锁操作,若锁已被其它协程上锁,则阻塞当前协程直到锁被释放。
lock.Unlock() 可以释放一个锁。
实例
看下面这个例子
123456789101112131415161718192021222324252627282930313233343536373839package mainimport ( "fmt" "sync")var wg sync.WaitGroupvar lock sync.Mutexvar k intvar locktest bool = false//change herefunc add() { defer wg.Done() if locktest { ...
Golang入门学习(14)
Go的第14课——runtime包
go并发编程之runtime包
runtime包里面定义了一些协程管理相关的api
runtime.Gosched()
让出CPU时间片,重新等待安排任务。
比如说下面这段代码
123456789101112131415161718192021222324252627package mainimport ( "fmt" "time")func show(s string) { for i := 0; i < 2; i++ { fmt.Println(s) }}func main() { go show("java") //主协程 for i := 0; i < 2; i++ { runtime.Gosched() //注释掉查看结果 fmt.Println("golang") } ...
一个普通的CTFer的感想
作为练习时长两年半的 CTFer,发表下感言吧。
CTFer的那些事
比赛我还是非常喜欢的,那种和队友一起激情淦题的过程那真的是非常的棒,甚至一些比赛能让我做到不吃不喝一天在电脑前打,唯
CTF 能做到了,特别是到了每次 Nepnep 战队要参加的各种什么
XCTF,或者是强网杯之类的,总是要扛起大旗去打比赛的,虽然自知能力不足以扛大旗,但是能做点微不足道的小贡献也能让我开心很久。最开心的自然是每次比赛交
flag 的时候,那是巴不得让所有人知道,虽然这有装 x
的嫌疑,但是我只是想分享一个普通的 CTFer 做出题目的喜悦。
因为学校队伍的原因,我一开始也是义无反顾地选择了二进制的路线并在上面越走越远,回想当初对计算机很多特性一窍不通的我,到现在能熟练地使用一些自己学到的知识并加以利用,CTF
还是帮了我很大的忙。
我学CTF的历史
说到 CTF,那可不得不提到我的学姐了,当初她带我进了
CTF,选择了这个方向,加入了网络安全的大家庭,我最幸运的是我刚好赶上了
Nepnep
战队在寒假的一次培训(当然也是学姐告诉我的,我太感谢学姐了!!),我也加入了
...
Codeforces Round 842(Div.2)解析
这场是真的输麻了,D嗑错了 + C FST
A. Greatest Convex
题目描述:
题目分析
在 1~k 中找出一个尽可能大的数 x 使得 \(x!\times (x-1)!\ mod\ k=0\) 也就是说能被
k 整除。那么化简一下式子得到 \((x+1)\times (x-1)!\ mod\ k=0\) 然后要在
k 以内找到尽可能大的数 x
成立,很显然,x=k-1
的时候是最优的。所以我们的标程就是输入一个值我们输出 k-1
就行。
标程
1234567891011121314151617181920#include<bits/stdc++.h>#define maxn 200005using namespace std;int a[maxn],b[maxn];char s[maxn];int n,m;int dp[maxn],sum1[maxn],sum2[maxn];void solve(){ scanf("%d",&n); printf("%d\n" ...
Linux Shell重定向
补补Linux的基础吧
重定向
简介
大多数 UNIX
系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
在打开一个文件之后,我们会获得一个文件描述符
fd,而我们默认打开的三个文件的文件描述符分别是
0(stdin),1(stdout),2(stderr)。
重定向标识
在 Linux 命令中 三个默认文件描述符的
名称
代码
操作符
Linux 下文件描述符(Debian 为例)
标准输入(stdin)
0
< 或 <<
/dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout)
1
>, >>, 1> 或 1>>
/dev/stdout -> /proc/self/fd/1 -> /dev/p ...
Golang入门学习(13)
Go的第13课——Go 并发
这几天元旦在外面浪呢,也是很长一段时间没有学习,今天来补补。
go并发编程
协程
Golang中的并发是 函数
相互独立运行的能力。Goroutines是并发运行的函数。Golang提供了Goroutines作为并发处理操作的一种方式。
创建一个协程非常简单,就是在一个任务函数前面添加一个go关键字:
1go function(1,2,3)
相当于是让 function 异步执行,后续语句不等待
function(1,2,3) 执行完毕。
就相当于是开一个线程去执行函数内容,等同于 python 中的
threading.Thread(target=funciton,args=[1,2,3]).start()
实例
为了起到效果,是用了 time 包里的 sleep 函数。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package mainimport ( "fmt" " ...
攻防世界 x Nepnep x CATCTF 2022 Nepnep战队官方WP
CatCTF2022 官方WP
目录
感谢
招新
PWN
bitcoin🪙
EXP
非预期
源码
HRPVM🖥️
漏洞
EXP
源码
injection2.0💉
exp
上传脚本
kernel-test
本次资源合集,包括源码,EXP,docker🧬
Ret2usr
简易讲解
源码
重点
攻击思路
EXP
上传脚本
tips
zip💼
非预期
源码
welcome_cat_ctf🎉
chao 🌿
前言
逆向分析
漏洞利用
exp
源码
Cat of magic🧙♀️
exp
地图
WEB
ez_js🐦
Cat cat😼
信息收集与尝试
题目首页
尝试读取系统文件
读取源码
app.py
代码审计
审计app.py
flag部分
文件读取部分
审计cat.py
文件读取功能
使用方法
解题
获取secret key
读取堆栈分布
读取对应位置内存数据
伪造session
...
2023的目标
2022年也快过去了,回想起2021年的最后一天,当时暗下决心要完成的目标,如今完成了多少?
2022目标完成情况:
CET4 pass(不挣扎了)
ZJCTF 一等√(check)
Linux 内核学习(根本没动过)
ACM省银(遗憾打铁,ICPC幸运拿铜)
CISCN FINAL√(二等)
期末考试考高点(根本不想学,甚至奖学金跟我已经没有关系了)
在 2022
这个特殊的时间,也发生了很多事,自己内心的想法也发生过很多改变。中间很长一段时间迷失过,做
web
安全,尝试挖洞,但是最终也是无果,浪费了小半年时间,直到身边很多的师傅提醒我,劝我,我才醒过来,这也让我更加坚定地往二进制安全的路上继续走。可能正是浪费的这些时间里,大部分的目标没能完成,但是现在还不晚,浪费的这些时间也跟让我看清了接下来的路该怎么走了。
2022的结束,2023的开始,将会有新的目标去追求,希望明年今日,我能一一完成。
学会lua和go语言的开发&逆向
深入学习一下 C++ 语言
CS:APP 刷完
继续去年的目标!ACM省银,或者是 ICPC 能冲一 ...
Golang入门学习(12)
Go的第12课——包管理
包
包可以区分命令空间(一个文件夹中不能有两个同名文件),也可以更好的管理项目。go
中创建一个包,一般是创建一个文件夹,在该文件夹里面的 go
文件中,使用package关键字声明包名称,通常,文件夹名称和包名称相同。并且,同一个文件下面只有一包。
创建包
新建一个文件夹,文件夹名就是包名,在里面所有的 go 文件中加入一句
package xxx。
比如我要创建一个 DAO 包。
1234567package DAOimport "fmt"func test() { fmt.Println("DAO:Test")}
导入包
要使用某个包下面的变量或者方法,需要导入该包,导入包时,要导入从
GOPATH 开始的包路径,例如,在 service.go
中导入 DAO 包,但是需要点小小的操作。
注意事项
一个目录下只能有一个package
import 后面的其实是GOPATH
开始的相对目录路径,包括最后一段。但由于一个目录下只能有一个package, ...