自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凉水的博客

博客就是我的笔记本

  • 博客(49)
  • 收藏
  • 关注

原创 【SHADER】Shader实例学习2:Loading Wheel

shader代码来自github上一个项目,compose libraries,但是链接找不到了。。。,代码很简洁,但是里面的技巧适合我这种初学者领会。前面在写shader的时候,习惯于算相对位置和区域,对比这个例子,旋转、位移、循环,用的都很经典,值得好好领会。(我觉得领会这个词对我学习shader很适用,就是很多场景,你觉得你理解了,但其实并没有。。。

2024-05-04 19:09:57 466

原创 【SHADER】Shader实例学习1:UI noise halo

又换方向做图形相关的工作了,门槛确实有一点,数学、图形什么的都要学,算轨迹用到力学什么的也是基本操作。大力出奇迹,跟着shadertoy里的众多大神学起来。本篇shader代码整洁,很适合我这种初学者学习入门。从代码结构很容易看出关键的实现思路,里面也有些技巧,值得反复学习,比如沿边界衰减的方式、不同的衰减方法、高亮色的计算、以及圆环的实现方式等。

2024-04-24 17:59:42 483

原创 【Netty】【源码】AttributeMap相关

JAVA本身有map接口及各种实现,Netty又根据自身的需要,进行了重新实现。个人感觉更多是针对使用习惯上及特定场景上的不同,进行重新的封装实现。(当然更多引用该接口的地方还没来的及看,有更多设计上的考虑也是有可能的)。整个看下来,技巧性的东西很值得学习。比如Attribute封装map的操作,用id来排序(用于二分查找),以及用map存储来使同名key唯一,以使用==来判断是否同一个key来代替equals判断。。。所有这些都是为了读多写少,key复用(每个channel都需要存储对应的key)的场景。

2023-08-12 15:20:28 443

原创 【JAVA】【源码学习】Cleaner/Reference

上一篇讲DirectByteBuffer时提到Cleaner用于释放内存,而Cleaner又跟Reference有关,那本篇就学习一下相关知识。看完之后,cleaner机制是理解了,但是soft和weak又有点迷惑,我只能粗浅的理解,内存紧张的时候,作用差不多,够用的时候,soft存活时间稍微长点?感觉也不一定哦,没看到注释里说优先清理weak类型的啊,懵~~~

2023-07-22 20:45:14 400

原创 【JAVA】【源码学习】ByteBuffer

最近看Netty相关的源码,Netty自己封装了一套完整、复杂的buffer功能,但是用到java nio,则必须转换为ByteBuffer,于是先学习ByteBuffer,才能更深入的理解ByteBuf。写的有点简略,主要是浏览了一遍之后,发现除了几个核心类,其他的大部分都是功能包装没必要花精力写。

2023-07-20 22:33:35 258

原创 【JAVA学习】ThreadLocal

多线程里面的一个小知识点,提供线程相关变量的存储能力,目标是类似线程本地存储(TLS),非共享,只供本线程使用,方便、快捷的一种机制。但是由于对象引用被其它线程的对象持有并修改导致的问题,不是该机制的锅。关于简化版,数组这个想法,上面的代码实现是个原始想法,未经严格测试,但是基本确定方法可行,只是变量多了之后,效率会有问题,毕竟是遍历查找。

2023-04-24 10:31:06 528

原创 【JAVA学习】注解学习

JAVA开发者肯定都用过注解,但是大部分可能跟我一样,只是用到runtime的场景,这段时间了解了一下另外两种场景,简单总结一下。一路看下来:1 SOURCE在编译期处理,需要生成新文件,个人感觉使用场景比较受限,毕竟如果是模板类型的,那解决方法很多;很复杂的场景,是不是直接代码实现更合适?那除非是工具型的,就是这些文件必须,但是可以减少开发者的代码开发工作量,或者隐藏无需开发者关注的细节。

2023-04-17 11:04:43 528

原创 【JVM学习】Class文件解析

java的class文件解析

2023-04-12 20:21:16 693

原创 【android学习】Looper/Handler/Message学习2

Looper/Handler/Message

2023-04-04 15:51:56 343

原创 【Android学习】Looper/Handler/Message源码学习1

Looper/Handler/Message学习

2023-04-04 15:09:27 385

原创 【CTF】ciscn_2019_es_2

ciscn_2019_es_2

2022-07-25 22:13:32 1700

原创 【CTF】pwn2_sctf_2016

pwn2_sctf_2016

2022-07-16 15:57:27 1065

原创 【CTF】jarvisoj_fm 1

jarvisoj_fm

2022-07-06 10:06:15 628

原创 【CTF】bjdctf_2020_babystack2

bjdctf_2020_babystack2

2022-06-30 23:00:35 704

原创 【CTF】bjdctf_2020_babyrop

bjdctf_2020_babyrop

2022-06-18 18:06:06 846

原创 【CTF】 2018_rop

2018_rop

2022-06-17 09:38:28 521

原创 [CTF] ciscn_2019_ne_5

ciscn_2019_ne_5

2022-06-13 10:54:53 570

原创 【CTF】ciscn_2019_n_5

题目分析1 反编译,寻找可以利用的地方main函数的反编译结果如下:int main(void){ 1 char text [30]; 2 setvbuf(stdout,(char *)0x0,2,0); 3 puts("tell me your name"); 4 read(0,name,100); 5 puts("wow~ nice name!"); 6 puts("What do you want to say to me?"); 7 gets(text);

2022-04-22 09:01:17 1069

原创 【CTF】not_the_same_3dsctf_2016

解题思路1 先反编译,找到mian函数undefined4 main(void){ char local_2d [45]; printf("b0r4 v3r s3 7u 4h o b1ch4o m3m0... "); gets(local_2d); return 0;}一看到gets,就觉得靠谱了。2 下一步找可利用函数,构造利用链。随便翻函数列表,没找到system以及/bin/sh,说明没有可以直接获取shell的方法;再继续翻,看到了get_secret函数,以及_

2022-01-30 16:13:27 4033 3

原创 【CTF】ciscn_2019_en_2

解题思路:1 先反编译,粗略看了下,溢出点应该在encrypt函数里(只贴关键部分):void encrypt(char *__block,int __edflag){ size_t sVar1; long lVar2; ulong uVar3; undefined8 *puVar4; undefined8 local_58 [9]; ... *(undefined2 *)puVar4 = 0; puts("Input your Plaintext to be encr

2022-01-26 20:13:04 3933

原创 【CTF】bjdctf_2020_babystack 1

解题思路:1 先反编译:undefined8 main(void){ undefined local_18 [12]; uint local_c; setvbuf(stdout,(char *)0x0,2,0); setvbuf(stdin,(char *)0x0,1,0); local_c = 0; puts("**********************************"); puts("* Welcome to the BJDCTF! *

2022-01-21 22:13:17 1552

原创 【CTF】get_started_3dsctf_2016

解题思路:1 先反编译,第一印象代码比较多、杂,找main函数找了半天才找到。undefined4 main(void){ char local_38 [56]; printf("Qual a palavrinha magica? "); gets(local_38); return 0;}2 看main函数,第一感觉是典型的栈溢出。然后就是ELF的一些保护。Arch: i386-32-littleRELRO: Partial RELROStack:

2022-01-19 09:23:23 680

原创 [CTF]jarvisoj_level2

解题思路反编译后的源码:undefined4 main(void){ vulnerable_function(); system("echo \'Hello World!\'"); return 0;}void vulnerable_function(void){ undefined local_8c [136]; system("echo Input:"); read(0,local_8c,0x100); return;}看完上面的反编译,直觉system函数

2022-01-12 21:42:29 567

原创 [CTF][第五空间2019 决赛]PWN5 1

解题思路反编译后的源码: srand(__seed); // 生成随机数 iVar1 = open("/dev/urandom",0); read(iVar1,&DAT_0804c044,4); printf("your name:"); // 读取输入 read(0,local_78,99); printf("Hello,"); // 打印输入 printf(local_78); printf("your passwd:"); read(0,loc

2021-12-09 18:42:14 1318

原创 [CTF][RoarCTF 2019]Easy Calc 1

解题思路1 尝试看网页源码,有set waf的提示信息。尝试各种注入,发现几种不同的报错,基本确定单引号、双引号等关键符号被过滤。让人很费解的是只要是字母都会报错。在这一步上没有有效思路。2 搜索带着前面尝试的结果进行搜索,发现对于网页源码中对于waf的提示没有有效利用,因为搜索结果大部分提到这种情况,试用变量名前面加%20(空格)即可绕过,试了下确实如此。重新尝试注入,这次可以输入字母,但是各种命令都会被拦截。一次无意中的误输入%20写成了$返回了calc.php的源码。 <?php

2021-11-01 21:09:29 705

原创 [CTF][SUCTF2019]easysql

解题思路1 先尝试可能的注入点单引号 双引号 数字 字母等等,看界面反应。最终结果:from union 等关键字被过滤,flag字符串也被过滤。可以使用堆叠注入。输入字符串界面无反应,输入数字会返回,1,2,3等也会返回。限制输入长度。基本可以确定,是select … from xxx的句式。但是会对最后一个字符做处理,如1,2,3,会返回1, 2,12 方向把前面的规则理清了不太难,但是如何注入,很费脑筋。因为from关键字被屏蔽,表名flag字符串也被屏蔽。同时又限制了输入长度

2021-10-22 21:03:12 437

原创 [CTF][ACTF2020新生赛]include

解题思路1 尝试随便试了下几种目录穿越的方法,没有错误回显,没法判断是否成功。…/…/ 以及file=xx.php等2 换思路简单试过后,发觉即使是目录攻击,这种无有效提示的攻击尝试方法,也是非常低效的。应该换个其它思路试一下。翻出ctfer成长之路,这本书,看到php的漏洞利用,有filter以及zip协议等,灵机一动,考虑到php内容本身没有回显,会不会在php代码注释里,不管,先用filter试一下base64编码,试了一下,得到:?file=php://filter/convert.b

2021-10-18 21:08:30 2923

原创 [CTF]强网杯2019随便注

简介对安全有兴趣,BUUCTF上一道一道做,记一些有意思的东西。关键点1 发现注入点这题很容易实验,最简单的1’ or 1之类的语句可以测出来,闭环单引号就可以。#注释符号,如果没起作用,需要注意使用url编码。2 PHP的防注入发现可以随便注之后,试了union select之类的,也面提示:return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);搜了一圈,没发现可以绕过的方法。然后尝试多语句

2021-10-16 18:29:11 451

原创 AOP学习之一 -- CGLIB使用介绍

AOP学习之一 – CGLIB使用介绍前言spring-aop是基于cglib实现的(spring本身基于cglib做了一些修改,但是使用方法类似),所以在学习aop的过程中,看到最后,是绕不过cglib的,如果不熟悉cglib的使用,可能会比较难理解其中的一些逻辑实现,本文就简单介绍下cglib的使用。CGLIBCGLIB简单来讲,就是围绕Callback接口而来,更具体的是MethodInterceptor接口,代理类的每个函数都会调用该接口的intercept函数,然后由intercept负责

2020-07-16 22:29:41 803

原创 pybind11以及打包学习

pybind11以及打包学习前言最近在看fasttext,看到使用pybind11把c++代码封装了一下,然后打包后安装,python可以直接调用,非常方便,有点兴趣,手动试了简单例子,本篇没啥干货,简单记录下实现过程。一 pybind11c/c++代码都是用pybind11封装,可以直接用pip安装即可,官方给出的入门示例十分简单:#include <pybind11/pybind11.h>int add(int i, int j) { return i + j;}P

2020-07-02 22:27:10 3824

原创 fasttext源码学习(2)--模型压缩

fasttext源码学习(2)–模型压缩前言fasttext模型压缩的很明显,精度却降低不多,其网站上提供的语种识别模型,压缩前后的对比就是例证,压缩前126M,压缩后917K。太震惊了,必须学习一下。看文档介绍用到权重量化(weight quantization)和特征选择(feature selection),下面结合代码学习下。说明:文章中代码皆为简化版,为突出重点,简化了逻辑,原版代码需到官方网页下载。一 特征选择一开始以为fasttext会用到比较复杂的特征选择算法,直到看到代码才差点闪

2020-06-30 22:25:51 1266

原创 fasttext源码学习(1)--dictionary

fasttext源码学习(1)–dictionary前言fasttext在文本分类方面很厉害,精度高,速度快,模型小(压缩后),总之非常值得学习。花了点时间学习了下源码,本篇主要是与dictionary相关。dictionary主要存储词语和切分词及对应的id,因为fasttext能处理超大数据集,如果不使用一些方法,只是加载这些内容,内存就很容易爆掉,我们来看看有哪些关键方法。一 词语数量控制该方法在Dictionary::readFromFile中调用,截取关键部分如下:// 简化版voi

2020-06-23 19:47:50 502

原创 K-means学习总结

K-means学习总结前言最近在看fasttext源码,看到里面压缩用到kmeans方法,不得不说fasttext实现的比较绕,c++语言一方面,没注释一方面,代码逻辑也有一点,理解确实困难,虽然看kmeans的原理并不复杂。所以去翻了scikit-learn的kmeans源码,帮助理解消化。看的过程中发现kmeans有改进版本,本文不涉及,只关注最简单的kmeans实现。关键步骤kmeans是一种聚类方法,主要是从N个样本中分出K个簇(cluster),在每个簇中找出一个中心(centroid),

2020-06-20 16:08:24 845

原创 ECB模式利用与CBC翻转攻击

ECB模式利用与CBC翻转攻击前言最近看WEB安全,其中讲到cookie操纵的时候, 提到ECB与CBC加密模式的利用,实际操作了一下,记录一下。ECB缺陷ECB加密过程:从图中可以看出加密过程,是明文分组后,每个分组被分别加密,所以明文相同的两个分组,被加密出来的密文分组也是一样的。换句话说,这种加密方式,没法完全隐藏明文信息。常见的一种利用方式,就是构造分组,获取想要的明文对应的...

2020-02-29 16:35:45 1425

原创 【点滴】MYSQL安装

Ubuntun 16.04安装mysql时遇到几个问题,记录一下:1、 无用户名密码提示/etc/mysql/debian.cnf,在这里找到用户名密码登录,然后修改root密码update mysql.user set authentication_string=password(‘password’) where user='root’and Host = ‘localhost’;还要...

2019-09-21 20:53:21 210

原创 【机器翻译】BLEU学习

BLEU学习简介BLEU(bilingual evaluation understudy),是一种翻译结果的评估方法,主要概念来自于这篇Bleu: a method for automatic evaluation of matchin translatrion论文,本文主要学习和总结该论文及相关材料。1. 评估标准BLEU的思想基于一个前提:机器翻译的结果越接近专业人士的翻译,结果越好。...

2019-09-21 20:49:19 1417

原创 【DP笔记】二

【DP笔记】二前言被两道题虐了,不多说,直接看题吧。。。题目1:Best Time to Buy and Sell Stock IV对于该题,确切的说是我按照DP的思路找到一种解法,但是时间复杂度在O(kknnn), 对,你没看错,两个K,三个N,基本不用想,输入数组稍大一点,就会TIMEOUT。先说下基本思路:按照标准的DP思路,按段划分求得每个分段的第K笔交易的最大值,[0,K]...

2019-08-17 18:02:05 341

原创 【DP】笔记一

【DP】笔记一摘要动态规划方法通常用来求解最优化问题(optimization problem).这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称这样的解为问题的一个最优解(an optimal solution),而不是最优解(the optimal solution),因为可能有多个解都达到最优值。我们通常按照如下4个步骤来设计一个动态规划...

2019-08-03 18:43:15 179

原创 [Netty笔记一]ByteBuf(一)

[Netty笔记一]ByteBuf(一)Netty的ByteBuf很复杂,需要慢慢学习,先从java.nio.ByteBuffer对比看起。一 JAVA NIO的ByteBufferByteBuffer是个抽象类,通过静态方法allocate、allocateDirect分别分配heap buf和direct buf。HeapByteBuffer就是heap buf的具体实现类,Direc...

2019-03-23 16:52:25 1343

原创 数据结构学习笔记--BST与AVL

数据结构学习笔记–BST与AVL前言BST和AVL复习。BST二叉排序树的3个主要性质:若左子树不空,则左子树上的所有节点的值均小于根节点的值。若右子树不空,则右子树上的所有节点的值均大于根节点的值。左、右子树也分别为二叉排序树。对于插入操作,按照上述规则,递归即可。但是对于删除操作,涉及到排序规则的保持,可分3中情况考虑:若删除节点为叶子节点,则删除该节点不影响整棵树的...

2018-11-10 17:21:07 507

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除