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
解法 ...
计算机组成原理复习(1)
考研复习第二天
计算机组成原理相关内容的复习
计算机基础
原码,补码,反码,移码
计算机基础计算机层次结构扔点错题上去:
完整的计算机系统应该包括 配套的硬件设备和软件系统。
存放当前执行指令的寄存器是 IR(Instruction Register)
运算器中不包含地址寄存器,地址寄存器集成在CPU中。
系列机的基本特性是:指令系统向后兼容。
计算机上层和下层的关系是:上层对下层扩展,下层是上层实现的基础。
计算机硬件能够直接执行的只有机器语言,硬件描述语言也需要经过一定的翻译才可以运行。
冯诺依曼计算机区分数据和指令主要是根据指令操作码的译码结果。
软件和硬件逻辑上等效,硬件执行速度比软件快。
计算机的性能指标
字长:计算机进行一次整数运算所能处理的数据位数,和寄存器位数,加法器有关,他们通常也相等。
数据通路带宽:外部数据的总线宽度,和内部寄存器数据总线宽度有区别。
主存容量:可以用字节表示,也可以用某数乘上字长表示,通俗点讲就是内存大小, MAR 的位数反映了存储单元的个数和可寻址的最大范围。
运算速度:
吞吐量:单位时间内处理请求的数量。
响应时间:发出请求后 ...
计算机网络复习(2)
物理层
通信基础概念数据、信号、码元
数据:传送信息的实体,传输方式有串行和并行
信号:数据的物理表现,如电信号和磁信号。
码元:在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。
通信上的概念信道按照传输信号形式的不同,可分为模拟信道和数字信道。按照传输介质划分可以分为有线信道和无线信道。
信号有基带信号(数字信号)和宽带信号(模拟信号)。
基带信号(即基本频带信号)—— 来自信源的信号。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。因此必须对基带信号进行调制 (modulation)。
基带调制:仅对基带信号的波形进行变换,使它能够与信道特性相适应。变换后的信号仍然是基带信号。把这种过程称为编码 (coding)。
带通调制:使用载波 (carrier)进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号,这样就能够更好地在模拟信道中传输(即仅在一段频率范围内能够通过信道) 。
带通信号:经过载波调制的信号。
通信 ...
2023的目标
2022年也快过去了,回想起2021年的最后一天,当时暗下决心要完成的目标,如今完成了多少?
2022目标完成情况:
CET4 pass(不挣扎了)
ZJCTF 一等√(check)
Linux 内核学习(根本没动过)
ACM省银(遗憾打铁,ICPC幸运拿铜)
CISCN FINAL√(二等)
期末考试考高点(根本不想学,甚至奖学金跟我已经没有关系了)
在 2022 这个特殊的时间,也发生了很多事,自己内心的想法也发生过很多改变。中间很长一段时间迷失过,做 web 安全,尝试挖洞,但是最终也是无果,浪费了小半年时间,直到身边很多的师傅提醒我,劝我,我才醒过来,这也让我更加坚定地往二进制安全的路上继续走。可能正是浪费的这些时间里,大部分的目标没能完成,但是现在还不晚,浪费的这些时间也跟让我看清了接下来的路该怎么走了。
2022的结束,2023的开始,将会有新的目标去追求,希望明年今日,我能一一完成。
学会lua和go语言的开发&逆向
深入学习一下 C++ 语言
CS:APP 刷完
继续去年的目标!ACM省银,或者是 ICPC 能冲一个牌子。
CISCN FINAL,趁着 ...
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,所以import 一个路径就等于是 imp ...