自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 【图解】Linux 内核协议栈网络收发包梳理

对Linux内核网络栈的收包和发包完整流程进行梳理

2022-07-12 22:22:37 1369 1

原创 ifconfig命令结果详解

ifconfig的结果解析以及深入内容理解

2022-04-04 13:33:39 2056 2

原创 【简洁版】Go语言GPM模型梳理

参考来源:30+张图讲解:Golang调度器GMP原理与调度全分析 (qq.com)0. 前提知识对比分析进程、线程与协程 (htmonster.xyz)a.协程的M:N关系为什么是M:N,而不是1:1或者N:1?N:1关系(一个内核线程thread 管理着多个用户协程co-routine)优点:切换开销小缺点:一个挂了就全挂了,一锅端1:1 关系 (一个内核线程thread 管理着一个用户协程co-routine)缺点:创建、删除、切换开销大b.Golang中的.

2022-02-06 19:48:02 1160

原创 (图解)进程的前世今生与僵尸、孤儿、守护进程

1.开天辟地——进程的源头2.子继父业——进程树类似于人类繁衍,所有的用户进程都是通过父进程创建子进程的方式创建的。pstree -p #可以查看进程直接的关系中国神话类比3.聚焦细节——父进程如何创建子进程父进程通过fork/exec机制创建子进程子进程的退出结束由两部分构成子进程exit关闭文件,释放部分资源,发送退出信号父进程wait释放资源,销毁进程表4.异常情况——孤儿进程与僵尸进程4.1 意外来临——孤儿进程父进程先于子进程结束没有爸爸还

2022-01-26 12:58:03 513

原创 五、TLS/SSL协议——数据安全与完整的保镖

0. 前语在上一节中,我们着重学习了TCP协议。TCP协议是一种点对点的面向连接的传输层。但是TCP协议中并没有安全方面的保障。在原始的TCP协议中,假设A发送"hello"到B。这个过程中,可能面临着以下的问题:窃听:"hello"被攻击者C窃听篡改:"hello"被攻击者C修改为"f**k"发送给B冒充:C假装是A向B发送消息 正常情况A—["hello"]—>B /* [窃听] */

2022-01-24 20:25:15 2033

原创 四、传输层总结回顾

2022-01-24 11:51:32 909

原创 四、UDP用户数据报协议——快就完了

TCP和UDP区别比较项目TCPUDP可靠性可靠不可靠连接性连接无连接面向数据流报文端一对一一对一,一对多,多对一,多对多流量控制滑动窗口无拥塞控制慢开始,拥塞控制,快重传,快恢复无速度慢快应用场景不追求可靠性,而追求速度的场景即时通讯音视频DNS域名转换…...

2022-01-24 11:29:06 1352

原创 四、TCP中的流量控制和拥塞控制

1. 流量控制1.1 定义**流量控制:**让发送方的发送速率不要太快,要让接收方来得及接收1.2 滑动窗口机制****2. 拥塞控制2.1 定义拥塞:对网络中某一资源的需求超过了该资源的可用部分拥塞控制:防止过多的数据注入到网络中,这样使得网络中的路由器或链路不致过载区别:拥塞控制:全局过程,涉及所有的主机和路由器流量控制:端到端,只涉及两个主机2.2 拥塞控制的作用两种控制方法开环控制:力求避免拥塞,提前设计闭环控制: 基于反馈,处理拥塞2.3 拥塞控制

2022-01-24 11:17:22 1450

原创 四、可靠交付的TCP协议——可靠传输的原理

0. 前语在上一节中,我们说到TCP协议有以下特点:面向连接可靠交付的服务全双工通信、字节流、点对点这一节,我们来分析一下TCP是如何实现可靠交付的。在弄清楚这个问题,我们要首先明白以下几个问题:a. 要可靠交付什么?答:TCP传输的是字节流(也就是从进程流进流出的字节序列)。这里有两个很重要的概念约束1.字节和2.序列b. 什么是可靠交付?答:因为传输的是字节流,可靠交付需要保证以下的情况:无差错:也就是字节要不能改变。不能发You are sweet, 但是却收到了You a

2022-01-23 12:03:55 1683

原创 简洁明要地区分Golang中 string, []byte,[]rune

0. 前导内容ASCII,GBK和UTF-8各种编码区别 (htmonster.xyz)1. 官网定义区别Strings, bytes, runes and characters in Go - The Go Programming Language1.1 byte 字节字节大家肯定都熟悉。字节是计算机的存储单位,1byte=8bits, 1byte 可以表示 2^8=256种情况。而[]byte 可以理解这样一个个byte组合起来的数组。1.2 string 字符串In Go, a

2022-01-18 16:48:00 918

原创 四、面向连接的TCP协议——连接的建立与断开

0. 引言在上一节中,以现实中的邮政系统为例,各层的计算机网络协议分别有着对应和特点计算机网络邮政系统特点物理层马路,航线,水面是真实世界中的载体(机械,电气,功能,过程特性)数据链路层高速路上的快递车司机城市内的跑腿小哥1. 货物被打包到快递盒内(封装成帧)2. 啥货物只要打包好都可以送(透明传输)3. 保证货物不被雨淋损坏(差错控制)【而且不知道运的是什么,只保证将货物安然无恙的送到目的地】网络层邮政中央调度系统1. 每个片区分配一个唯一的邮政编码(IP

2022-01-17 16:46:11 1714 1

原创 四、点对点的传输层【网络全景图分析系列】

0. 回顾在前面几章中,我们分别经过了很物理的物理层:提供了机械,电气,功能,过程特性(类似于马路,航线,水面)透明成帧的数据链路层:封装成帧【比特到帧】,透明传输【啥bit都能传】,差错检测【别受电磁干扰】(类似高速路上的快递车司机,不知道运了什么包裹,只知道将一车货物完整无恙地送到目的地,路上可能会拥堵,还得解决拥堵问题)网际互连的网络层:全局统一标识【IP】,路由选择【最佳路径】,网际控制【路不通了,数据丢失了得报告得诊断】(类似于全国邮政系统,当你寄出一份到西藏的包裹,得规划走川

2021-12-30 20:24:47 1305

原创 GDB exploitable插件源码分析

0. 背景源码: jfoote/exploitable: The ‘exploitable’ GDB plugin (github.com)1. exploitable命令实现1.1 使用方式example usage: (gdb) source exploitable.py (gdb) exploitable1.2 exploit.pyclass ExploitableCommand(gdb.Command): ''' 判断当前状态的可利用程度,将结果打印到stdo

2021-12-24 17:27:47 1201

原创 深入Linux内核架构——简介和概述

1.1 内核的任务应用程序的视角:增强的计算机【内核抽象了与硬件的细节】若干程序的视角:资源管理程序 【分配共享资源(CPU时间,磁盘空间,网络链接】其它视角:库 系统调用向计算机发送请求1.2 实现策略微内核只有最基本的功能由中央内核实现其它功能委托给独立进程(文件系统,内存管理)容易拓展,不容易崩溃Mac OS X宏内核内核的全部代码(包括内存管理,文件系统,设备驱动程序)都是单独的文件执行速度比较快模块弥补了部分可拓展性缺陷Linu

2021-12-02 20:51:24 2165

原创 三、网络层总结梳理

2021-11-24 19:26:10 933

原创 【图解】Golang的make与new的区别与深入理解

0. 引言在学习Go语言中,我们在初始化结构的时候常常遇到两个关键字make和new。这两者似乎都是去初始化一个变量,那两者有何区别?1. 官方文档解释直接看官方文档builtin package - builtin - pkg.go.dev,首先可以直接的注意到:两个函数的参数以及返回值不一样。a. 语法区别func make(t Type, size ...IntegerType) Type //多个参数,返回值位类型func new(Type) *Type

2021-11-20 09:56:32 1481

原创 三、 网际互联的网络层——网际控制【计算机网络全景梳理系列】

0. 回顾我们一开始讲到网络层就是一个全球范围内大的邮递系统。在前面两节中,我们学习到网络层中的两大类型的协议。其中RIP、OSPF 和BGP等路由协议解决了邮差如何找路的问题,ARP地址协议解决了邮差最后一公里如何找到快递对应的人的问题。而在这个大的邮递系统中,难免会出错。而如何检查差错就成为了一个问题,这一节,我们就来学习网际控制协议ICMP。1. ICMP网际控制协议ICMP(Internet Control Message Protocol) 是网络层中核心协议之一,它可以通过发送控制信息,

2021-11-19 09:28:24 1840

原创 三、 网际互联的网络层——路由【计算机网络全景梳理系列】

0. 回顾——网络层中的IP地址和ARP协议在上一节中我们讲到,网络层是为了实现全球任意两台设备之间的信息交换。这有点想咱们的邮政系统,而在网络层中每个设备有唯一的地址(IP)。它是用来交换信息的地址。同时,我们了介绍了根据物流地址(IP)找到具体身份证(MAC)对于设备的协议——ARP协议。ARP协议解决了写信的最后一公里问题。接下来这一节,我们来关注之前几百公里的事情,即快递小哥是怎么跋山涉水把数据包发送到目标IP的——网络路由。1. 互联网路由架构——自治系统(AS)为了了解IP包在传输的过程

2021-11-02 20:32:44 1186

原创 三、 网际互联的网络层——IP地址【计算机网络全景梳理系列】

文章目录0.回顾——数据链路层1. 新挑战——不同局域网之间如何交流2. 面向连接与无连接之争3. 网络层之魂——IP地址3.1 为什么需要IP地址,而不用MAC地址3.2 IP地址分配私有地址3.3 IP数据报封装4. 是谁的包裹?——ARP协议ARP协议机制广播机制——逐个问:“是不是你的包裹?”cache机制——拿小本本记下超时清除机制——人员流动ARP结构ARP攻击IPv6中NDP协议0.回顾——数据链路层上一节讲到,Bob和Alice等小伙伴建立了一个小团伙的局域网。在这个局域网中:他们

2021-10-26 20:48:37 679

翻译 《Hawkeye: Towards a Desired Directed Grey-box Fuzzer》论文阅读

作者会议Hongxu Chen 新加坡南洋理工大学CCS’18ABSTRACT定向灰盒fuzzing背景:灰盒fuzzing测试 (在测试真实世界程序是有效的)转折:现有的灰盒fuzzing方法缺乏导向性本文工作提出了4个定向fuzzer的特性设计要点收集call graph, 函数还有基本块层次到目标的距离在fuzzing的时候,根据静态信息和执行追踪来评估种子,以生成动态度量,然后用于种子优先级,功率调度和自适应突变这些方法帮助Hawkeye...

2021-10-26 17:10:15 760

翻译 《NEUZZ Efficient Fuzzing with Neural Program Smoothing》论文阅读

作者会议She, DongdongIEEE SP 2019Abstract第一段背景:介绍Fuzzing问题:现有Fuzzer存在的问题问题原因:现有方法使用遗传算法,在生成触发多种BUG的输入上有用,但是经常被卡在随机的突变序列中问题解决方法:梯度下降算法及梯度下降算法的优点第二段挑战:梯度下降算法难以应用在现实世界中,因为不连续性,可能被高原或者山脊卡住解决方法:通过创建一个平滑的代理函数来拟合程序的离散分支行为本文内...

2021-10-25 20:35:11 452

原创 程序自动修复相关工作总结

思维导图原文出处0.背景(1) 传统维护面临成本和维护能力不足问题软件维护占用了软件开发成本的 50%~75%[1],其中,成本消耗最大的就是程序错误定位和修复(2) 不可控条件下无法维护问题由于软件逻辑设计复杂性和运行环境的限制,当软件发生错误时,维护人员可能无法远程修复该类错误.在航天领域中应用的软件系统,当卫星、航天飞船等空间飞行器与地面的通信联络中断时存在不可控的情况.1 程序自动修复描述1.1 相关概念针对各类不同的错误(error)修复场景,将整个修复过程自动

2021-10-21 10:03:51 1281 1

原创 二、可靠透明的数据链路层【计算机网络全景梳理系列】

0. 前言——数据链路层的基本问题在上一节中,Bob、Alice和他们的朋友们用电路建立一个网络,用灯泡亮灭来传输信息。他们之间就构成了一个小的网络“局域网”。但是他们在使用的过程中却遇到了不少问题。封装成帧首先,为了保存通信,电路是一直存在的。可问题在于,Bob和Alice并不是一直在发送信息,怎么区分Bob**发送信息什么时候开始什么时候结束?**同时,Bob可能发送不同的信息,信息与信息之间如何区分出来?如该图上部分,仅仅在物理层传输数据时信息与信息之间很容易出现干扰,这很让人抓狂。那怎么

2021-09-08 16:19:24 412

原创 一、物理层真的很物理 【计算机网络全景梳理系列】

首先,第一篇,就从最底层的物理层开始梳理。正如名字中有个物理一样,物理层真的很物理。物理层要解决的问题就是两台设备如何在真实世界中传递信息。1. 物理层的作用思考这样一个问题,在假期里,你(Alice)和你的朋友(Bob)想不花一分钱能够在各自家中能够聊天。想想看怎么实现呢?如果你和你的朋友是邻居,那最简单的方式就是吼一吼了。但是如果你们俩一个住在镇子的东边,一个住在西边。你们俩看了看手头中有电线,灯泡,电池**这些工具,如何在见不到面的时候实现交流呢?对,一个最简单的方法就是使用电线将你们连接起来,

2021-09-06 20:44:17 158

原创 〇、基本知识 【计算机网络全景梳理系列】

从今天开始挖了一个新坑,就是来梳理一下计算机网络,能建立一个全景的框架。首先这一部分先梳理一下一下基础的知识1.计算机网络的发展历史花了半天时间把发展历史简单地梳理了一下,具体看图:2. RFC、 ISO、 IEEE有啥区别?在学习计算机网络各种协议的文档时候,经常看到这三个名称。那么,它们有何区别?ISO和IEEE 都是国际标准化组织。是组织,用来制定标准的,类似的还有IEFT、ANSI、IEC、IUT等。而RFC 请求注解文档(Requests for Comments,RFC),是用来

2021-08-31 17:35:35 446

原创 【终于明白了】源码+图解分析梳理 Golang 中输入输出I/O

文章目录前言标准库的区别1. 提供基本接口的`io`最基础的接口 `io.Reader`与`io.Writer`辅助接口 `io.Seeker`与`io.Closer`进阶:偏移量指定`io.ReaderAt`和`io.WriterAt`进阶:来源与去处指定 `io.ReaderFrom`和 `io.WiterTo`适配:各种数据类型的读取与写入Byte 读写一个字节Rune 读一个字符String 写入一个字符串组合:各式各样的接口搭配总结:io库中的所有接口概要图实现:接口的各种实现场景附:io库中的一

2021-08-24 18:53:32 680

原创 图解分析进程、线程与协程

0.前言最近在复习Golang语言,又遇到了“协程”这个大兄弟。干脆花了一天时间把进程,线程与协程进行了一个对比分析,并对应做了一些图。相关背景概念并发:并发是指一个时间段内,有多个程序同时运行,但是任意时刻只有一个程序在CPU上运行。并行:指任意时刻点上,有多个程序同时运行在多个CPU上同步:指代码调用IO操作时,必须等待IO操作完成才返回的调用方式异步:指代码调用IO操作时,不必要等IO操作完成就返回的调用方式阻塞:指调用函数时候当前线程被挂起非阻塞:指调用函数时候当前线程不会被挂起,

2021-08-07 10:24:23 427

翻译 (翻译)Go 切片:基本使用和内部原理

原文:官方博客 Go Slices: usage and internals - The Go Blog (golang.org)添加部分自己的理解介绍Go 的切片类型为处理类型化数据的序列提供了一种方便而有效的方法。切片类似于其他语言中的数组,但有一些不寻常的特性。本文将介绍什么是分片以及如何使用分片。数组切片类型是建立在Go的数组类型之上的抽象,因此要理解切片,我们必须首先理解数组。基于数组!一个数组类型定义指定了一个长度和一个元素类型。例如,[4]int类型表示一个由四个整数组.

2021-07-28 17:47:02 255

原创 Golang 错误与异常 总结与最佳实践

区分错误与异常很赞成参考文章中知乎高赞中“达达”老哥说的,首先要理清错误与异常之间的区别。我在阅读之后我总结的区别如下:区分点错误异常语言层面errorpanic不处理的结果可能会导致逻辑业务上的错误,或者进一步产生异常进程异常退出预见性可以预见不可预见总的来说,在Go语言中,可以按照是否可以提前指导,很分明的区分了错误(可以提前知道)与异常(不能提前知道)。不同语言之间的错误与异常错误与异常,拿来和Python和Java相比的话,总结起来应该是这

2021-04-29 19:24:36 1042

原创 理解Golang中的nil

参考:有趣的面试题:Go语言中的nil比较 - 知乎 (zhihu.com)理解Go语言的nil - 简书 (jianshu.com)Golang中的nil,没有人比我更懂nil! - 知乎 (zhihu.com)常用的nil在写程序的时候经常会遇到nil这个词,比如说错误判断:f, err := os.Open(filePath)if err != nil { panic(err)}这很容易理解,但是有如果对nil与nil进行比较,如下:fmt.Println(nil==.

2021-04-29 10:49:31 745 2

原创 理清Golang中标准库net/http的结构

参考:https://golang.org/pkg/net/http/参考:https://draveness.me/golang/docs/part4-advanced/ch09-stdlib/golang-net-http/一. 简介http模块提供了HTTP客户端和服务端的实现二. 两个关键结构体: server和client结构体clientHTTP客户端介绍Client的Transport通常具有内部状态(缓存的TCP连接)客户端对于多个goroutine并发使用是.

2021-04-21 10:29:17 294

原创 图解程序与共享库的装载梳理——输入./hello 之后发生了什么

文章目录一.准备工作环境信息程序准备认识程序程序的节与段二. 开始运行——strace追踪程序运行0.隐匿于背后的fork1. execve——运行新程序do_execve 函数do_execveat_common 函数exec_binprm识别并加载二进程程序search_binary_handler识别二进制程序load_elf_binary加载ELF程序execve主要运行步骤总结execve执行程序之后图示2.加载动态链接库ld.so加载之后3.加载共享库4. 程序本身开始执行三. SUMMARY

2021-04-01 21:15:26 724

原创 一文图解内核mm_struct 结构体

主要分为四个部分。内存空间布局主要包括data code 堆栈等的起始结束地址线性地址管理由mmap 指向 vm_area_struct代表的链表结构红黑树由mm_rb指向 rb_node代表的红黑树结构页表由pgd指向PGD的地址...

2021-03-04 20:04:55 536 1

原创 linux 内核task_struct 源码分析与解析(整合配图)

文章目录进程状态0. 进程标志符1. 运行状态2. 进程标记任务状态1. 任务终止2.ABI处理3.execve4.io等待进程内核栈地址内核栈布局进程调度1.优先级2. 调度策略3. 进程调度调度器调度器策略实体调度器、策略、调度实体关系4. 就绪队列5. 其它信息进程地址空间进程描述符mm_struct核心分析(mm_struct图解进程亲属关系时间与定时器1. 时间2. 定时器定时器分类信号处理文件系统Ptrace1. ptrace 标志2.ptrace 任务列表进程控制块(Processing C

2021-03-04 19:55:21 3099 1

原创 飞机大战游戏

步骤1 面向对象化改造将原有的代码基础改造为面向对象编程的方法原代码import pygamepygame.init()screen=pygame.display.set_mode((400,600))# 检查退出while True for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() # 设置背景 se

2020-08-21 15:28:19 553 1

原创 ubuntu中ASLR与gcc安全编译选项(简洁版)

ASLRASLR等级与说明等级说明0关闭1保留 共享库 栈 mmap vdso随机化2完全 1 基础上 brk() 分配的内存空间也将被随机化ASLR等级查看sysctl -n kernel.randomize_va_spacecat /proc/sys/kernel/randomize_va_spaceASLR修改sysctl -w kernel.randomize_va_space=0echo 0 > /proc/sys/kernel

2020-07-05 22:39:27 1449

原创 Linux函数调用劫持的方法总结(带图)

参考文章:https://www.cnblogs.com/LittleHann/p/3854977.htmlhttps://lwn.net/Articles/132196/https://blog.csdn.net/andy205214/article/details/77148573https://www.cnblogs.com/arnoldlu/p/9752061.html1.概览Ring3中劫持基于环境变量LD_PRELOAD的动态库劫持Ring0中劫持Kerne.

2020-05-20 14:22:34 3663 1

原创 ping源码分析(超详细,多图,带背景分析)

ping源码分析1. 背景知识简介1.1 ping简介​ Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。ping程序是基于ICMP协议实现的。​ Ping命令常见格式:ping [-t] [-a] [-n count] [-l...

2019-12-14 16:11:56 6665 1

原创 树莓派 kali系统 OLED屏幕 Python GPIO 实时显示运行性能

0.前言​ 最近给树莓派安装了kali系统,想在闲余时间在树莓派上跑些脚本。ssh实时查看太麻烦,想到手头有OLED(SSD1306) 和几个RGB灯,便想着给树莓派做个实时显示系统,可以直观的查看到树莓派运行的状态。说干就干。0.1设计目标开机自启动OLED实时显示树莓派运行信息IP地址CPU使用率内存大小与使用率硬盘大小与使用率RGB灯根据CPU的使用率变换颜色,由低...

2019-12-05 16:59:06 1912

原创 C语言大整数运算库加减乘除余(超详细 带步骤 图片 与源码)

BigInt大整数运算库前言 这个版本为第一个版本,未有太多优化。大多采用类似手算的算法 这个算法内存占用过大。自定义的结构体数字表示采用定长的方法,后期将优化采用动态长度的方法,减少内存占用。 Bint.h头文件具体解析数据结构表示数字的存储是以十进制为基础的,所以把一个char的大小定义为一个十进制存储bitDec。而一个数字的表示采用基于bitDec的数组...

2018-12-03 18:40:10 8399

树莓派LCD3.5驱动

树莓派各种LCD屏幕的驱动 包括3.5 3.2 使用方法可以结合其他博客

2018-06-14

空空如也

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

TA关注的人

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