自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Doub1's Blog

真正的大师,永远怀着一颗学徒的心

  • 博客(135)
  • 资源 (1)
  • 收藏
  • 关注

原创 Istio 自动注入原理及复现一个简单的自动注入

Istio 自动注入原理, mutatingwebhookconfiguration,复现简单的自动注入

2025-02-09 04:27:48 902

原创 一篇文章理解堆栈溢出

向后合并是指如果前一个区块没有被使用,将自身指针指向前一个区块,并且将大小合并,向前合并则相反。向前合并和向后合并,并不是说对于当前区块来说,合并到前一个或合并到后一个,而是正好相反。这是一个简单的堆溢出题,我将其中的函数都重命名了,在IDA中你能知道这些函数时做什么的。,但是我们也仅仅是指修改了一个内存地址,而不是像栈溢出那样修改了它的执行流程。在进入需要call的函数后,如果我们从栈的低地址一直覆盖内容到高地址,就可以。的第二处出现了栈溢出,但是我们发现溢出的大小实在是太小了,我们无法写入。

2024-07-01 00:07:29 1736

原创 PLT、GOT ELF重定位流程新手入门(详细到爆炸)

如果你使用当前rip+0x2fe2你会得到一个错误的地址,因为x64下的RIP相对寻址需要跳过当前RIP,也就是其实是下一条指令的地址+0x2fe2。让它进行跳转,但是这样你就不会理解为什么汇编代码没有变跳转的地址却不同,新手兄弟们可以跟着我一步一步计算,我们首先看看这个jmp是。这就很奇怪了,网上的文章明明说这是索引,确实是这样,其实这里传入的是。我们注意一下.got.plt的地址,由于关闭了pie,我们可以看到地址了,是。是不是很好玩,此时存的内容就是它的下一条指令地址,看图。

2023-02-05 21:25:27 1852

原创 Java Apache Commons Collection3.2.1 理解Transformer 接口

接口开始分析Transforms the input object (leaving it unchanged) into some output object.@param input the object to be , should be left unchanged@return a transformed object它说传入的对象会,并返回记住了,就是用来用的,在这里你可以先简单的当它是一个。实现此接口的类有下面这些:比如有一些有趣的,我们看看它们的方法它将返回,其中和在其传入

2022-06-25 01:44:29 2210

原创 Windows 驱动开发 新手入门(四)

本篇文章介绍一下设备对象,这是写驱动过滤的基础,比如键盘,串口等等的过滤。是的缩写,直译就是物理设备对象,一般来说,就是在就是的设备对象。 只能返回设备对象地址。 指向包含 Unicode 字符串的缓冲区的指针,该字符串是设备对象的名称。 指定表示所需访问的。 通常 ,DesiredAccess指定FILE_READ_DATA。 不经常指定FILE_WRITE_DATA或FILE_ALL_ACCESS访问权限。 指向表示相应设备对象到用户模式代码的文件对象的指针(如果调用成功)。 指向表示命名逻辑、虚

2022-06-21 21:12:03 2492 1

原创 Windows 驱动开发 新手入门(三)

之前的文章Windows 驱动开发 新手入门(一)Windows 驱动开发 新手入门(二)在之前我们大概知道驱动是什么,应用层如何和内核层通信后,我打算再补充一些知识。在第一篇文章中,为了好理解,我写过一句话,是,就是,在驱动中入口函数中打印,可以看见所属,也就是。我们知道在应用层开发时,通过Windows公开的API,我们可以在应用层去设置线程,进程的优先级,优先级越高,那么下次它获得CPU调度的机会就越大,此时我们可以通过SwitchToThread允许执行优先级较低的线程,或Sleep(0)立即重

2022-06-11 01:43:27 2235 2

原创 Win10 x64 KeServiceDescriptorTable SSDT 偏移计算理解

Win10 x64 KeServiceDescriptorTable SSDT 偏移计算理解引言站在巨人的肩膀上实现代码通用的偏移计算方法引言很久没写博客了,水个博客,KeServiceDescriptorTable 和 KeServiceDescriptorTableShadow的原理我就不写了,百度很多,主要这篇写如何定位x64下未导出的KeServiceDescriptorTable。站在巨人的肩膀上前辈们在之前已经找到了一个计算公式,通过读取msr寄存器的0xC0000082读取到

2021-11-23 03:54:40 1878 2

原创 浅谈serverless/云原生 及 IaaS PaaS SaaS Caas FaaS/BaaS 小白文理解

浅谈serverless/云原生 及 IaaS PaaS/SaaS FaaS引言云计算和云原生发展历史云计算云原生云原生中的Serverless写在最后引言浅谈一下serverless理念,然后说说发展历史,最后细说serverless,小白文给你讲透,不用奇葩的栗子举例,就白话文让你看懂。serverless(无服务),这里说的无服务并不是指微服务中的服务,而是说服务器(服务的基础设施层)。serverless真的是没有服务器吗?其实并不是,只是对于用户(我们对于提供商来说都是用户)来说,我

2021-03-08 04:29:03 2863 2

原创 Java SocketChannel控制接收数据字节长度及复用ByteBuffer

Java SocketChannel控制接收数据字节长度及复用ByteBuffer引言混乱的数据结构尝试读取固定大小数据如何复用ByteBuffer文件传输Buffer复用及减少使用用户层缓冲区

2021-02-24 03:55:55 2958

原创 C# 我是如何理解async await的

C# 我是如何理解async await的引言理解设计初衷使用async await让代码看起来简洁引言写这篇文章的原因是网上关于C# async关键字和await关键字的文章很多,但是在我看来写的有些绕了,其实这俩关键字很容易理解,需要注意的是:这和ES7中的async、await有很大区别,如果你理所当然的用ES7中的理解,那么你已经走歪了。设计初衷async/await关键字设计的初衷:是为了让Task.ContinueWith之后或嵌套Task之后,return新的Task的代码变的简洁。

2021-02-22 01:10:55 329

原创 Spring Cloud 2020 + Nacos + spring-cloud-loadbalancer + gateway 实现灰度发布

Spring Cloud 2020 + Nacos + spring-cloud-loadbalancer + gateway 实现灰度发布引言Nacos Server 1.4.1Producerpom.xmlControllerapplication.propertiesConsumerpom.xmlControllerGatewaypom.xmlapplication.ymlspring-cloud-loadbalancer 实现灰度发布原理引言Spri

2021-02-13 06:54:15 2636 13

原创 Windows 驱动开发 新手入门(二)

Windows 驱动开发 新手入门(二)引言创建NT式驱动关于提示无法找到证书代码分解DEVICE_EXTENSIONPsSetCreateProcessNotifyRoutineIRP_MJ_DEVICE_CONTROL派遣函数IO控制码 IoControlCode创建加载驱动程序引言之前的文章大概了解的驱动程序的结构和一些主要的函数,本篇我们写一个NT式驱动,用来监控进程的创建与销毁。创建NT式驱动由于VS2019中无法帮我们快速创建NT式驱动,我们使用上一篇文章的项目改造一下即可,删除cpp文

2021-02-12 19:28:07 3794 13

原创 Windows 驱动开发 新手入门(一)

Windows 驱动开发 新手入门(一)引言驱动介绍Win10 WDK建立一个驱动项目建立MyDriver.cpp理论知识驱动入口派遣函数 MajorFunctionDevice和SymbolicLinkDeviceExtensionIRP引言本文是对Windows下的驱动开发有一个简单的介绍,我尽可能写的小白文一些,因为大多数的驱动开发书籍对新手来说还是过于难理解。驱动介绍在介绍驱动开发之前,先了解一下基础知识,驱动是什么的?驱动这个词是由Driver直译的,这和平常开发中的测试驱动开发(TD

2021-02-12 18:37:22 21717 9

原创 static变量 你真的了解吗

static 变量你真的了解吗引言static初始化猜测结论引言突然想到以前没事干去看编译器编译之后的switch,static之类的产生的汇编代码,觉得有趣,switch写过了,这次写static。static初始化所有人都知道在函数内定义static变量后只会初始化一次,就像下面这样:#include <iostream>using namespace std;int test(){ static int a = 10; if (a==10){ cout &lt

2021-01-20 01:15:38 358

原创 CRC 循环冗余校验

CRC 循环冗余校验引言多项式 Polynomical原数据填充CRC校验过程是否被篡改引言写点基础,CRC校验(循环冗余校验 Cyclic Redundancy Check)在有时候玩RFID的时候也许会用到,有些校验位使用简单的异或或相加,有些校验位使用CRC校验,实际上CRC也是使用和异或差不多的方式(模2除法),只是多了一个CRC除数,CRC校验其实并不难。多项式 Polynomical我们先不管CRC标准中的多项式,仅仅对于在CRC中的作用来说,它就是模2除法的除数,这个除数由多项式中的

2021-01-18 16:44:58 547 2

原创 windows和linux下c/c++程序的退出事件/信号处理

windows和linux下c/c++程序的退出事件/信号处理引言atexitSetConsoleCtrlHandlerLinux 信号处理有哪些信号简单的signal捕捉信号集信号屏蔽字(block) && 信号未决字(pending)屏蔽信号sigaction函数与sigaction结构体sigaction结构体:sigaction函数sigsuspend 信号暂停引言Linux的信号和Windows中的事件很像,朋友问我有没有办法让一个控制台程序退出前执行某些东西,所以就可以写在一

2021-01-03 22:10:50 4684

原创 Windows 对象私有命名空间的使用

Windows 对象私有命名空间的使用,以前的笔记#include "pch.h"#include <iostream>#include <windows.h>#include <Sddl.h> // ConvertStringSecurityDescriptorToSecurityDescriptor#include <strsafe.h> // StringCchPrintfint main(){

2021-01-03 20:59:22 464

原创 C/C++ 给 Java 通过Socket传输int问题

C/C++ 给 Java 通过Socket传输int问题引言int高低位乱序解决引言事情是这样的,朋友有个软件,但是是单机版本,他想实时向服务器传输生成出来的报告,算是服务器那边有个备份。我先看了一下,软件是C/C++的,CRT也是版本齐全,而且那台电脑也不允许装什么其他环境了,我很自然的就用C/C++写了,而服务端使用JAVA写的,因为服务器那边本来就装了JAVA环境,但没有10以上版本的CRT,所以我就用了2个不同语言写了。int高低位乱序如果两边同时使用c/c++写,那么不会出现这个问题,因

2020-12-28 17:21:39 1126 1

原创 OAuth2协议 白话理解+SpringCloud Security 栗子

OAuth2协议 白话理解+SpringCloud Security 栗子引言白话理解专业名词认证授权服务和资源服务scope作用域关于白话理解搭建认证授权服务引入依赖编写认证配置(SecurityConfig)配置授权服务基于内存Token的授权服务配置基于JwtToken的授权服务配置申请token简化模式申请token申请授权码根据授权码申请token密码模式申请token刷新token检查token搭建资源服务引入依赖配置资源服务远程调用认证授权服务的TokenService资源验证基于JWT的无状

2020-12-19 16:38:45 1260 4

原创 SpringBoot 多数据源 指定数据源实现读写分离 手动实现和使用

引言本篇文章讲一下如何实现多数据源实现读写分离,不涉及JTA和微服务的分布式事务,如果需要了解分布式事务的可以在分布式专栏下找到相关文章。使用dynamic-datasource-spring-boot-starterpom 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-start

2020-12-19 15:20:49 788 1

原创 Istio 调用链追踪与指标收集

Istio 调用链追踪与指标收集引言调用链追踪安装ZipkinIstio 启用调用链追踪暴露zipkin服务自定义采样率使用全局配置针对Deployment设置指标收集dashboard-metrics-scraperCEXL表达式使用Prometheus+Grafana配置模型处理程序实例规则引言Mixer组件 提供策略控制和遥测收集功能,我在Istio架构那篇文章有写,但是从Istio 1.5开始,Istio标准指标由Envoy代理直接导出。遥测组件被实现为Proxy-wasm插件。由于看的书比较

2020-12-17 19:20:40 2489

原创 使用Burp Suite 两种方式绕过 CSRF_TOKEN

使用Burp Suite 两种方式绕过 CSRF_TOKE 第一种绕过姿势(csrf_token存在于当前页面):第二种绕过姿势(csrf_token不存在于当前页面):分两步:第一步第二步第一种绕过姿势(csrf_token存在于当前页面):按照国际惯例将请求发送到Intruder,然后在Position中设置变量。我这里模拟一下,各位看官就凑合看吧,因为有csrf_token,那么变量数量肯定大于1,Attack type就需要更改了,因为Sniper只支持单个变量,我们设置成Pitchfork。

2020-12-16 21:43:29 3588 1

原创 SQLMap 入门到入狱

SQLMap 入门到入狱引言SQLMap 连接数据库文件读取目标注入指定URL注入GET/POST请求及重要参数自定义prefix及suffixLevel等级设置额外的参数tamper脚本如何编写tamper脚本引言SQLMap,是一款很老的自动注入工具了,最早我记得可能当时还流行着Pangolin(穿山甲)和Havij(由于图标问题我们叫它萝卜)。实际上SQLMap,帮我们解决的就是对目标的大量自动注入测试。目前来说,如今的ORM框架99%使用prepare预处理参数进行参数绑定,能注入的我估计只

2020-12-16 20:32:29 554

原创 AES 5种加密模式 && 初始向量的影响

AES 5种加密模式 && 初始向量的影响引言AES的工作模式ECB模式(密码分组链接:Cipher-block chaining)CBC模式(电子密码本模式:Electronic codebook)CFB模式(密文反馈:Cipher feedback)OFB模式(输出反馈:Output feedback)引言写这篇文章是由于,关于如何使用AES的文章很多,大多都是API调用,但是关于IV初始向量的作用好像没几个文章有写,IV初始向量在CBC,CFB模式下,仅影响前16字节的块,推荐使用

2020-12-15 20:07:37 14018 11

原创 C++ 方法后的const及引用限定符作用

C++ 成员函数后的const及引用限定符作用const 限定符const跟在成员方法后引用限定符const 限定符我们最早学习const应该是在字符串函数中使用的const char* szSource,此时我们虽然可以通过szSource++,一个字符一个字符读取,但是无法修改字符内容,比如*szSource='a'。const跟在成员方法后class Foo{public: Foo() { data = 10; } void show() const { //data

2020-12-14 16:10:02 639

原创 SOCKET_RAW 手动封装TCP协议

SOCKET_RAW 手动封装TCP协议还是笔记,移到博客来了。/*使用IP头包含选项创建原始套接字之后,再打开IP_HDRINCL 选项,即可在IP头中封装自己的协议,而不是仅仅使用系统预定义的协议。一般可以使用这种方法来发送UDP和TCP数据IP数据报格式:Version域:这4位指定了数据报的IP版本。对IPV4来说此域值为4.IHL(IP header length 的缩写):因为IP头长度不是固定的,所以需要这4位来确定IP数据报中数据部分的开始位置。大多数IP数据报不包含此

2020-12-13 21:18:39 758

原创 SOCKET_RAW 手动封装UDP协议

SOCKET_RAW 手动封装UDP协议还是笔记,移到博客来。/*使用IP头包含选项创建原始套接字之后,再打开IP_HDRINCL 选项,即可在IP头中封装自己的协议,而不是仅仅使用系统预定义的协议。一般可以使用这种方法来发送UDP和TCP数据IP数据报格式:Version域:这4位指定了数据报的IP版本。对IPV4来说此域值为4.IHL(IP header length 的缩写):因为IP头长度不是固定的,所以需要这4位来确定IP数据报中数据部分的开始位置。大多数IP数据报不包含此选项

2020-12-13 21:17:19 859

原创 SOCKET 广播消息

SOCKET 广播消息还是笔记,移过来了// 广播消息.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。////其实和UDP是没什么区别,就是多了个BROADCAST 的设置。。。。。//这次因为无聊 所以看看MAKEWORD 到底做了什么,和我的想法一样吗,结果是,它的做法比我强。。#include "pch.h"#include <iostream>#include <winsock2.h>#include <process.h&

2020-12-13 21:15:37 343

原创 SOCKET IP多播

IP多播以前的笔记,注释都在代码里,移过来了。// IP多播.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iostream>#include <process.h>#include <WinSock2.h>#include <ws2ipdef.h>#pragma comment(lib,"ws2_32.lib")#pragma warning(disabl

2020-12-13 21:13:29 1028

原创 SOCK_RAW 实现ICMP路由追踪

SOCK_RAW 实现ICMP路由追踪#include <pch.h>#include <iostream>#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <winsock2.h> #include <ws2tcpip.h>using namespace std; #pragma comment(lib, "Ws2_32.lib") //IP报头typedef struct IP

2020-12-13 21:11:51 481

原创 SOCK_RAW ICMP 协议 PING

SOCK_RAW 实现ICMP以前的笔记,移过来了。ICMP需要使用 原始套接字。原始套接字是允许访问底层传输的一种套接字协议,它们可能会被恶意利用,因此 仅 Administrator用户组有权限创建SOCK_RAW类型的套接字。任何人在NT下都可以创建原始套接字,但没有Administrator权限的人不能用它做任何事情,因为bind函数会直接返回错误,错误码:WSAEACCESS。如果需要绕开管理员权限,可以使用windows提供的IcmpSendEcho系列函数。在发送ping请求的时候

2020-12-13 21:10:24 984

原创 冒泡排序 选择排序 快速排序 归并排序

冒泡排序 快速排序 归并排序引言稳定与不稳定排序算法区别冒泡排序快速排序归并排序引言写点基础的文章,这三个排序算法算是很基础了。稳定与不稳定排序算法区别稳定排序算法是指,如果碰到相同的值,两者不会互换位置。不稳定排序算法是指,如果碰到相同的值,两者可能会互换位置。冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的稳定排序算法。理解冒泡排序其实很简单,比如有个数组为m,长度为n。首先我们需要确定的是,肯定需要从头到尾遍历一次,下标记作i,那么这个值就是m[i],和这个

2020-12-13 19:50:16 514 1

原创 非对称加密RSA算法原理及实际应用场景

非对称加密RSA算法原理及实际应用场原理数学基础质数模指数运算小白理解为什么需要足够大的质数引言我数学差的离谱,所以我朋友去学AI,我还在这搞这些。虽然数学差也能学那些,但是毕竟不想当掉包侠,没走那条路。所以本文如果在数学方面有问题,请留言给我,避免误人子弟。对称加密算法有AES,DES,3DES,RC4等,加密解密方共用1个密钥,这就导致了很容易被破解,因为密钥在客户端中也存在,无论你如何加密这个字符串,程序跑起来的时候这密钥总会在内存里。一般情况下,我们会使用RSA加密,RSA使用一个公钥

2020-12-13 04:19:07 6275 3

原创 RocketMQ与Kafka IO区别

RocketMQ与Kafka IO区别引言Kafka 存储原理topic与partitionpartition与segment那么如何利用索引确定消息位置呢?消息有序性RocketMQ 存储原理引言简单说说RocketMQ与Kafka的区别。如果文章写错了,请下面留言给我。Kafka 存储原理Kafka在创建topic时会指定partition数量,在物理层面上有几个partition就有几个文件夹,类似这样:topic与partitiontopic名称-partition序号

2020-12-12 19:14:58 417

原创 RocketMQ 入门

RocketMQ引言引入依赖NameServerTopic 和 TagProducer 发送消息同步消息异步消息单向消息Consumer 消费消息PushConsumer及广播模式进阶顺序消息顺序Producer顺序Consumer延迟消息TransactionMQProducer 发送事务消息引言发现写过了RabbitMQ和Kafka,这次补上RocketMQ,之后有空会讲讲这几个消息中间件的实际场景选型和选择原因。本篇文章不写整合Springboot,因为Springboot你可能看不到这些细节。

2020-12-10 23:46:34 290

原创 我是如何理解delegate和event的

我是如何理解delegate和event的引言delegate声明委托使用委托添加新的FunctionFunc和Actionevent引言在以前我学习C#时,有一天看到了delegate,发现这玩意挺好用,和函数指针一样,之后又出来了个event,我当时真的没明白为什么需要这个event,有点画蛇添足。delegatedelegate 英文直译委托,理解它其实很简单,在理解它之前,我们看看如何使用它。声明委托首先我们需要声明一个委托。声明委托其实和声明函数是一样的,唯一的区别在于前面多了个de

2020-12-04 04:20:58 509

原创 Entity FrameWork IEnumerable和IQueryable 导致全量查询问题

引言以前用.net写的东西,关于EF的坑因为不了解所以让我很难受,这算是把笔记搬过来了。用EF的感觉我很喜欢,因为我确实更喜欢手写sql语句,Linq的语法更让我舒服,这就像是在用Java开发时我喜欢用mybatis而讨厌使用hibernate。IEnumerable和IQueryable因为从在看一本老外写的c# .net mvc5的书的时候,我当时关注的是项目整体的设计过程和模式,没有关注EF这个玩意,它的栗子是这么写的: public class EFDbContext : DbCon

2020-12-01 15:52:10 364

原创 C# IEnumerable 和 IEnumerator

C# IEnumerable 和 IEnumberatorIEnumerable 和 IEnumberator区别简单的例子自己实现 IEnumberatorIEnumerable还可以是方法的返回类型IEnumerable 和 IEnumberator区别这段时间写点基础文章,这次写的是C# IEnumerable 和 IEnumberator,这两者的区别在于:IEnumerable其意义就是表示可迭代的,其中会调用到GetEnumerator()。IEnumberator表示的是一个迭代器,

2020-12-01 15:28:49 447

原创 从 set_new_handler 来看泛型的互斥特性

从 set_new_handler 来看泛型的互斥特性引言栗子真正的意义引言关于 set_new_handler,effctive c++ 中有写,这里就跳过,这次只是讲如何偏门的利用泛型特性。如果有好几个类都需要重写new方法,我们需要重写很多的operator new,因为我们同样需要的是这几个类都有特定的new的异常捕获函数,而不能因为继承,导致所有的类共用一个异常捕获函数。栗子下面的泛型类,我们可以发现,根本没有使用到这个T类型,那么为什么要这么做?我们是为了继承,在面向对象中,我们总

2020-12-01 04:04:14 260

原创 std::thread和pthread的区别 及 传递对象指针和引用

std::thread和pthread的区别 及 传递对象指针和引用引言区别std::thread 如何传递对象引言朋友突然问我,pthread和std::thread有什么区别?我不知道他为什么会问到这个问题,但是看到问题后我的第一反应是,你是不是C和C++混学的。区别pthread是linux下的多线程API,头文件为pthread.h,关于linux线程和进程区别本篇文章略过,因为本文算是给自学人的科普。std::thread是c++标准库中的线程库,其意义在于可以跨平台不改代码因为在wi

2020-11-30 17:40:20 4960

MFC 实现截图.rar

MFC 实现截图

2020-06-10

空空如也

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

TA关注的人

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