C++
文章平均质量分 94
c-rain
你唯一所知,就是你一无所知
展开
-
【Golang源码分析】Golang如何实现自举 - 程序入口点(五)
根据上一章的内容得知,其实不同系统的可执行文件都有自己的格式。只要生成对应的格式后,并且有执行权限就可以执行。 那么问题来了,所说的程序入口点到底是什么?可编译性语言,不同的语言的入口点不一样,大多数的都叫main。那么不能叫其他的吗?main真的是入口点吗?好像有很多问题需要探索,需要去挖掘。 既然这么多问题,就带着问题来看看go1.3的入口点是什么?1.程序入口点 说到程序入口点,这个其实很容易理解,就是程原创 2021-11-08 15:42:39 · 902 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举 - 6l的链接过程(四)
接到催更的信息,其实还是很高兴。本来忙了很长一段时间为生活奔波,想给自己一个假期。后来脑子里响起了莎士比亚的一句话“如果一年到头如假日,岂不像连日工作那样疲乏?”,然后还是决定放下安逸的生活,继续去探索。 经过最近一段时间的忙碌,对生活也多了一些重新的认识。人活着不要盲目,不要止步不前,不要高估自己的实力,也不要低估自己的能力,多一些自我审视,反复review或许在生活上、工作上走的会更远~ 一顿感概之后还是要回归主题,上一篇文章说到了原创 2021-11-04 17:52:51 · 667 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举 - 6g的编译过程(三)
很长的一段时间没有写文章了,因为忙着出版书籍,以及双减的影响有些懈怠。Golang自举这个系列还是接着之前的《【Golang源码分析】Golang如何实现自举 - dist介绍》一文中继续写,由于linux下go1.3编译*.c文件会调用gcc,编译go文件会调用“/mnt/pkg/tool/linux_amd64/6g”,所以本篇文章主要研究6g,以及go1.3源码编译过程。1.g6简单回顾 在go1.3中其实一部分go的源代码还处于c源码实现,其中一部分原创 2021-11-03 16:15:18 · 718 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举 - dist介绍(二)
前言 根据《Golang如何实现自举(一)》的相关引导,知道了go1.3的go编译是需要go_bootstrap、然而生成go_bootstrap,需要dist工具进行生成。那么本期主要关注dist工具。1.dist工具介绍 其实dist工具是属于go的一个引导工具,它负责构建C程序(如Go编译器)和go工具的初始引导副本。它也可以作为一个包罗万象用shell脚本替换以前完成的零工。通过“go tool dist”命令可以操作该工具。该工具不同系统下对应在p原创 2021-01-11 20:41:09 · 879 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举(一)
前言 在写一篇文章之前,某位大佬勾起了我对学习这个主题的欲望。刚好那天带着病痛,后来根据一个Makefile字符集的问题,拿着开始研究。发现研究、研究不疼了,果然和周星驰电影《国产凌凌漆》一样精神麻醉才是最好的麻醉药。今年以来也没有给自己立啥学习目标,刚好研究Golang自举动,可以作为我今年的学习目标。该篇文章只是个开始,后续会继续迭代。 大家都知道在Go早起其实编译器并不是go去编写的,后期自举实现了编译。不过在学习Golang自举之前要了解一下Golan原创 2021-01-10 15:50:24 · 2425 阅读 · 0 评论 -
【Mysql源码分析】基于行的复制实现之“主从复制”
前言 经过对《【Mysql源码分析】基于行的复制实现之“主从关系建立”》了解了主从复制的一些原理,本章内容会深入对binlog、relaylog做讲解。并对流程做深入了解。 在开始交接之前,我们带着几个问题切入:如何查看binlog和relaylog事件?relaylog是如何写入?binlog是如何同步?binlog格式如何解析?1.如何查看binlog和relaylog 在mysql中可以通过如下命令可以查看都有哪些binlog日志,如图1-1:mysql> show原创 2020-10-24 23:54:48 · 451 阅读 · 1 评论 -
【Mysql源码分析】基于行的复制实现之“主从关系建立”
前言 经常听到别人说Mysql的SBR、RBR、MBR,如果不清楚,那么可以跟着文章一起来学习。由于涉及到主从的内容比较多,需要拆分成多篇内容来概述,这章先从基础知识和主从关系建立开始讲起。还会出一篇文章详细讲解从主同步。1.了解什么是SBR、RBR、MBR?2.了解下主从配置该如何配置?3.了解主从关系如何建立?1.配置Mysql主从 在本文中,分为一主一从。主监听的端口为3306,从监听的端口为3309。1.1主服务配置master配置,配置文件my.cnf:[mysqld]po原创 2020-10-17 18:53:06 · 408 阅读 · 2 评论 -
【Mysql源码分析】mysql协议分析(一)
前言 在近期的mysql学习过程中,一直想做的一件事就是分析下mysql的协议。了解Mysql协议也是深入了解Mysql的过程。本章的内容由于篇幅过大,会拆分成两章来讲述。Mysql版本:8.0.20抓包工具:Wireshark1.Mysql协议分析 在分析mysql之前我们首先要把mysql的ssl关掉,抓包过程中TLS解析比较麻烦。1.1 关闭Mysql SSL 可以通过配置my.cnf文件加入skip_ssl指令关闭ssl,配置如下:[mysqld]skip_ssl图1-原创 2020-08-25 00:27:53 · 1796 阅读 · 2 评论 -
【Mysql源码分析】mysql词法分析
前言 最近在集中学习mysql源码,刚好分了几个主题,涉及到词法解析、语法解析、查询器、优化器等。刚好把准备的PPT内容摘出来整理成相应的文章。Mysql版本: 8.0.20调试工具 : lldb系统环境 : MacOS 10.14.3在了解词法解析之前,我们带着几个问题来切入:(1)什么是词法解析?(2)Mysql 8.0.20词法解析有什么优化?(3)Mysql 8词法解析都有什么过程?1.什么是词法解析? 词法分析(lexical analysis)是计算机科学中将字符序列转换原创 2020-08-07 19:50:38 · 1355 阅读 · 0 评论 -
【Mysql源码分析】MySQL为什么有时候会选错索引及成本计算
前言 在一次Mysql分享中提到过,会将相关的一些知识点整理成相应的文章。由于前段时间忙的不可开交,一直没有时间去整理这些相关内容。但是必定说出来的话,就要去落实。本章内容主要以实践为主,最好是跟着动手实践。这样才能逐步掌握其中奥秘。那么我们开始吧!!!1.安装数据库 在做这个实践之前,我们要先安装一下mysql数据库,这边是通过源码的形式进行安装。方便后续的调试跟踪。1.1通过git下载mysql源码:#cd /Users/edz/Desktop/src-source/mysql-serve原创 2020-07-29 02:04:43 · 988 阅读 · 2 评论 -
【黑客编程】外挂编程技术揭秘(四) 完结篇
引言: 发现快一个月没有写文章了,从写ttc文章以来,一直有一个想法就是把外挂揭秘系列的更新完成。延续到现在半年过去了。一直专注于做其他的一些事情没有针对这个系列做更新。前几天做了一次早读课技术分享,其实早读课的一些内容也是从研究外挂里面提取出来的。当时讲的不够细致,刚好借着这个机会写一篇文章回顾下知识点。之前一直是想把封包和驱动保护放在两个章节一块讲了,这次可以合到一起。1.驱动保护原理 说到驱动保护可能很多人都不知道。其实就windows应用而言,游戏也是一个窗口,窗口与窗口之间是可以直接通过原创 2020-05-15 17:52:34 · 3378 阅读 · 0 评论 -
centos6.9安装nginx安装http3
前言: 安装nginx支持http3时对版本是软件的有一些要求的,安装过程中如果版本不差异会导致编译存在问题。还有就是安装过程中会有一些依赖支持库; gcc版本:大于 gcc-4.7 pcre版本: pcre-8.00 nginx版本: nginx-1.17.9 或 nginx-1.16.x cmake版本: 大于 cmake-3.0 golang版本: go1.13.x...原创 2020-04-14 19:18:01 · 1065 阅读 · 0 评论 -
排查API的connection reset by peer和Timeout exceeded问题
前言这是一次实际生产中遇到的问题,根据问题模拟反复试验。看完这部分代码,您可以直接了解backlog的工作原理,已经系统调优时该怎么调,不至于胡乱设置。排查API的connection reset by peer问题:晚上22点~早上6点会偶尔出现,16:00出现过一次;Client.Timeout exceeded大量出现;分析问题原因:connection reset by p...原创 2020-03-29 20:22:19 · 3322 阅读 · 0 评论 -
PHP常驻内存下phpredis扩展的一个BUG
前言本文主要是一次线上异常排查内容。排查2020 03-24 23:14分tw挂掉后,英语偶线现取不到数据问题:2020 03-24 23:14 tw挂了一台,30秒没连接上redis;有一定机率从redis拿不到数据偶发;没有错误,拿不到数据;怀疑对象etcd配置问题; - 确认过相关配置(排除)twemproxy可能变更节点;-查看过对应日志(排除)经过排查twemp...原创 2020-03-26 14:23:10 · 1130 阅读 · 0 评论 -
【协议分析】rpcx网络协议分析之kcp数据传输
前言:KCP是一个可靠的协议,它的延迟率比起tcp低很多。在游戏和视频推流领域广泛使用。在TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。文章中内容解析了整个kcp的传输数据数据包组成。系统: mac OS 1...原创 2020-03-24 20:52:43 · 2714 阅读 · 0 评论 -
【协议分析】rpcx网络协议分析之tcp
前言:最近在学习rpcx,为了更清楚搞懂rpcx的各种协议组成。对rpcx的协议做了一个深入学习。系统: mac OS 10.14.3golang: go1.12 darwin/amd64调试工具:lldb抓包工具:tcpdump(一)tcpdump工具使用tcpdump是一个网络抓包工具,tcpdump支持针对网络层、协议、主机、网络或端口的过滤。并提供an...原创 2020-03-19 02:05:22 · 1295 阅读 · 0 评论 -
【Redis源码】集群之分布式cluster原理(十四)
前言:接着上一章开始讲,上一章我们讲到如果配置一个cluster,以及cluster的基础命令。以及初始化一个cluster的流程。本章继续讲一些cluster原理。版本:redis4.0.0(一)消息结构1.1 数据包类型以下是数据包的类型:#define CLUSTERMSG_TYPE_PING 0 /* Ping包类型 */#define CLUSTERMS...原创 2020-03-09 01:33:27 · 483 阅读 · 0 评论 -
【Redis源码】集群之分布式cluster建立集群关系(十三)
前言:redis在redis3.0版本之后推出redis cluster模式集群,redis cluster是官方提供的分布式解决方案。当一个redis节点挂了可以快速切到另一个节点中。当遇到单机内存、并发瓶颈时可以考虑使用redis cluster。集群的内容会比较长,这一章会分为两篇作为描述:《集群之分布式cluster建立集群关系》与《集群之分布式cluster原理》redis版本:...原创 2020-03-04 01:11:04 · 1612 阅读 · 0 评论 -
【Redis源码】集群之哨兵sentinel故障转移 (十二)
前言:各位看官大家好,这个主题内容比较长然后接着上一章就拆成了两个部分。那么我们接着上一章内容开始说。上一章中我们说到哨兵定时器sentinelTimer它们作用。sentinelTimer方法中执行哨兵模式中的任务。包括执行定期操作比如PING、分析主服务和从服务的INFO命令、故障转移等等。那么这一章我们就先从sentinelTimer开始说起。(一) 基本结构1.1 sentinelT...原创 2020-02-28 03:31:15 · 922 阅读 · 0 评论 -
【Redis源码】集群之哨兵sentinel初识(十一)
前言:说到哨兵之前,可以思考一个问题。为什么有哨兵机制?这一点其实可以从主从复制的优缺点作为考虑。主从复制其实有一个致命的弱点就是它是非高可用的,比如说当主节点出现故障时,那么此时我的写入就会出现问题,切换需要重新配,就无法做到高可用。此时其实就可以用到哨兵进制,哨兵自动发现故障,并通过选举算法重新选举新主完成转移和通知实现高可用。参考资料:https://redis.io/topic...原创 2020-02-27 02:50:29 · 440 阅读 · 0 评论 -
【Redis源码】集群之主从复制replication(十)
前言:说到主从大家应该都不陌生,也应该都清楚主从解决服务的哪些问题。单台服务器的支撑能力是有限的,为了提高我们的QPS或者说数据的容灾。主从服务则起到了相应的作用。不过主从复制也会有一些缺点,比如说“高可用问题”,“单服务器资源有限问题”。针对高可用问题我们后续解析redis集群的哨兵,针对单服务器问题,我们会解析redis Cluster分布式应用。redis版本: 4.0.0...原创 2020-02-23 21:12:43 · 523 阅读 · 0 评论 -
【Redis源码】ziplist压缩表(八)
前言:压缩表是一个连续内存空间的线性结构,元素之间紧挨着存储,没有任何空隙。redis为了节省空间,当使用zset和hash容器对象时再元素个数较少时采取了压缩表(ziplist)进行存储。redis版本:4.0.01.压缩表结构介绍压缩表构成如下:zlbytes :压缩表字节长度,类型uint32_t占用4个字节,需要存储此值才能调整整个...原创 2020-02-12 01:50:57 · 380 阅读 · 0 评论 -
【Redis源码】位图SETBIT、BITCOUNT(九)
前言:位图并不是一个特殊的数据结构,位图其实就是一个字符串,位图这种结构占用空间特别小。如果是数亿以上的用户如果存储活跃,如果是用key/value去存储每个节点都需要数G去存储,存储是很大问题。如果换做位图去存储则可以大大节约空间,不过适应于用户ID连续性的。除此之外也可以用作比如说点赞的存储。redis版本:4.0.0(一)命令解析 命令原形 ...原创 2020-02-14 00:34:13 · 779 阅读 · 0 评论 -
【Redis源码】字符串详解(七)
前言:学过C的人应该都知道C的字符串是以字节数组存在,然后以\0结尾。计算字符串的长度使用strlen函数,这个标准库函数的复杂程度是O(n)。它需要对字节数组进行扫描遍历计算长度。作为redis单线程的应用是这种形式是比较消耗性能的。Redis实现了字节的字符串叫sds(Simple Dynamic String),它是一个带着长度的信息的结构体,属于柔性字符串。版本:redis...原创 2020-02-08 14:44:32 · 441 阅读 · 2 评论 -
【Redis源码】发布与订阅(六)
redis版本:4.0.0(一)发布与订阅功能介绍:官方文档: https://redis.io/topics/pubsubRedis是一个快速稳定的发布/订阅消息传递系统。发布与订阅命令: 命令 备注 命令原形 PSUBSCRIBE 订阅一个或多个给定匹配模式的频道 ...原创 2020-02-06 00:03:40 · 407 阅读 · 0 评论 -
【Redis源码】详细的RDB和AOF持久化过程(五)
(一)分析RDB和AOF的优劣势:优劣势官方介绍:https://redis.io/topics/persistence持久化详细介绍:http://oldblog.antirez.com/post/redis-persistence-demystified.html1.RDB:RDB的优点:1)RDB是redis数据非常紧凑的单文件时间点表示。RDB文件非常适合备份...原创 2020-01-16 14:53:38 · 613 阅读 · 0 评论 -
【Redis源码】轻松看懂rdb文件(四)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。redis版本:4.0.0、一.数据存储格式:二.查看rdb文件查看文件16进制编码#od -A x -t x1c -v dump.rdbRDB文件格式如下:0000000 52 45 44 49 53 30 30 30 38 fa 09 72...原创 2020-01-15 02:11:31 · 1089 阅读 · 1 评论 -
【Redis源码】dict字典学习(三)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。redis版本:4.0.0一.redis 数据库流程结构二.结构解析typedef struct client { uint64_t id; /* 客户端唯一增量ID. */ int fd; /* 客户端socket fd. */ redi...原创 2020-01-14 15:50:39 · 331 阅读 · 0 评论 -
【Redis源码】Redis命令INCR、DECR、INCRBY、DECRBY学习(二)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。文中只是放了部分调试内容,完整的可以根据流程图跟踪。redis版本:4.0.0调试工具:lldb一.redis incr命令调用流程DECR和INCR和类似只是一个是增加一个是减少。其余两个命令也大同小异;二.源码分析4个命令相应源码,t_string.c中:void incrCommand(...原创 2020-01-14 15:44:01 · 1311 阅读 · 0 评论 -
【外挂编程】外挂编程技术揭秘(三)DLL注入
引言:一个礼拜没有更新这个主题文章了,这周三看到一个微信推送。某某某博士由于写外挂被抓。当时心里那是一个崩溃,不过之前写了这个主题,还是会继续写完,不能半途而废。不过了解这本技术的千万不要拿去捞偏门。我刚写这篇文章的时候在想这个主题要不要改一改。叫《我们一起写外挂吧,会被抓那种》,^ - ^,玩笑了。开始我们今天的内容吧,我们还是继续讲内存挂,不过我们今天的主题是讲注入。文中介绍的注入...原创 2020-01-13 18:01:56 · 13710 阅读 · 2 评论 -
【外挂编程】外挂编程技术揭秘(二)
引言:经过上一篇文章大家可能对外挂有了一个初步的认识,之前的内容比较简单,应该大家很容易掌握。我写作过程中我发现三个篇幅可能写不完,后续还可能要多加几个篇幅,这篇我们就先以内存挂为主吧。话不多说了,让我们开始吧。文章中代码github地址:https://github.com/Diamonds-ZhaoYu/hz_example环境要求:系统:Windows语言...原创 2020-01-08 14:29:48 · 3060 阅读 · 8 评论 -
【外挂编程】外挂编程技术揭秘(一)
引言: 本人并不是这方面专业的人员,我是一名PHP工程师。写这个主题,源自于我的“初心”。在最初我没有接触技术的时候,那会我是个网虫,刚开始也学习一些黑客相关的知识,当用到一些工具时,就很好奇这些东西是怎么做的。我就特别想去写一些相关工具和外挂以及一些小病毒。在一次与一名老师的偶遇中,我进入了技术领域。但是最初学习的是Java的web方向,后来由于工作原因转的PHP...原创 2020-01-08 14:13:09 · 12338 阅读 · 5 评论