Git学习之路(1)
Git学习之路(1)——Git的基本用法
就是多学学对自己有用的东西吧
水一章为敬!
什么是GitWIKI:
在程序设计中,分布式版本控制(英语:distributed revision control 或 distributed version control,又译为分布式版本控制),又称去中心化版本控制(decentralized version control),是一种版本控制的方式,它允许软件开发者可以共同参与一个软件开发项目,但是不必在相同的网络系统下工作。其作法是在每个开发者电脑中复制一份完整的代码库以及完整历史[1]。因此在无法连接网络时,仍可以进行软件的分支及合并,可以加速大部分的作业,增加此情形可以进行的工作,而且系统的代码库可以在多家电脑上备份,不需靠单一位置的备份。而多个位置的代码库再透过其他机制来达到同步。
以分布式版本控制方法,作出的软件版本控制系统,称为分布式版本控制系统(distributed revision control system,缩写为DRCS,或是distributed version control system,缩写为DVCS)。著 ...
Golang入门学习(16)
Go的第16课——timer,ticker
Timer开启定时任务Timer顾名思义,就是定时器的意思,可以实现一些定时操作,内部也是通过channel来实现的。
虽然可以使用 sleep 实现,但是这个对象可以让我们细化到某个操作到某个操作之间间隔确定的时间,比如我的顺序是要求 A B C,要求 A 和 C 至少间隔两秒的时间。如果使用 sleep 的话就不太方便操作,因为 B 也会消耗一定时间,如果直接 sleep 2 可能会导致等待多余的时间,那么我们就可以在A事件开始后设定 timer,在 C 开始前读出 timer 的 channel,这样就可以保证了,而且写法非常简便。
1234567891011121314151617package mainimport ( "fmt" "time")func main() { timer := time.NewTimer(time.Second * 2)//创建定时器 fmt.Printf("time:%v\n", time.Now()) ...
开发操作系统(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格式软盘专用的代码 Stand FAT12 f ...
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 { lock.L ...
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") } time.Sle ...
一个普通的CTFer的感想
作为练习时长两年半的 CTFer,发表下感言吧。
CTFer的那些事比赛我还是非常喜欢的,那种和队友一起激情淦题的过程那真的是非常的棒,甚至一些比赛能让我做到不吃不喝一天在电脑前打,唯 CTF 能做到了,特别是到了每次 Nepnep 战队要参加的各种什么 XCTF,或者是强网杯之类的,总是要扛起大旗去打比赛的,虽然自知能力不足以扛大旗,但是能做点微不足道的小贡献也能让我开心很久。最开心的自然是每次比赛交 flag 的时候,那是巴不得让所有人知道,虽然这有装 x 的嫌疑,但是我只是想分享一个普通的 CTFer 做出题目的喜悦。
因为学校队伍的原因,我一开始也是义无反顾地选择了二进制的路线并在上面越走越远,回想当初对计算机很多特性一窍不通的我,到现在能熟练地使用一些自己学到的知识并加以利用,CTF 还是帮了我很大的忙。
我学CTF的历史说到 CTF,那可不得不提到我的学姐了,当初她带我进了 CTF,选择了这个方向,加入了网络安全的大家庭,我最幸运的是我刚好赶上了 Nepnep 战队在寒假的一次培训(当然也是学姐告诉我的,我太感谢学姐了!!),我也加入了 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",n-1); ...
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/sel ...
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" "time")func ...
攻防世界 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
一键获取flag
写在最后
ez_bypass🍥
ez_curl🔗
wife💃
web_challenge💪
CRYPTO
DDH_Game
解法 ...