Fuzz源码理解
关于 AFL 与 AFLNet 中对代码功能的一些理解,未完。
C socket网络通信
在C语言Socket通信中,客户端和服务器端的流程如下:
服务器端流程:
- 创建服务器套接字(socket):使用
socket()
函数创建一个套接字,指定地址族(例如,AF_INET
表示IPv4)和套接字类型(例如,SOCK_STREAM
表示TCP套接字)。 - 绑定套接字到指定地址和端口(bind):使用
bind()
函数将套接字绑定到服务器的IP地址和监听端口上。 - 监听连接请求(listen):使用
listen()
函数监听指定端口上的连接请求。可以指定一个等待队列的最大长度。 - 接受连接请求(accept):使用
accept()
函数接受来自客户端的连接请求。它会阻塞程序,直到有客户端连接请求到达。返回一个新的套接字,用于与客户端进行通信。 - 与客户端通信:使用新的套接字进行与客户端的通信。可以使用
read()
和write()
函数从客户端接收数据和发送数据。 - 关闭套接字(close):通信结束后,使用
close()
函数关闭套接字。
客户端流程:
- 创建客户端套接字(socket):使用
socket()
函数创建一个套接字,指定地址族和套接字类型。 - 设置服务器地址和端口:使用
struct sockaddr_in
结构设置服务器的IP地址和端口号。 - 连接服务器(connect):使用
connect()
函数连接到服务器。传入服务器的地址和端口号。 - 与服务器通信:使用已连接的套接字进行与服务器的通信。可以使用
read()
和write()
函数从服务器接收数据和发送数据。 - 关闭套接字(close):通信结束后,使用
close()
函数关闭套接字。
这些是基本的流程,你可以根据具体需求在通信过程中进行数据的读取和写入。记得在错误处理方面进行适当的处理,例如检查函数返回值是否为负数来判断是否出现错误,并采取相应的措施。
fuzz libmodbus by AFL
AFL技术白皮书
AFL技术 白皮书
GPT翻译AFL whitepaper,建议对照原文阅读,或者直接阅读原文。
附原文链接:https://lcamtuf.coredump.cx/afl/technical_details.txt
本文档提供了对American Fuzzy Lop(AFL)内部工作原理的简要概述。有关通用指南,请参阅README;关于AFL背后的动机和设计目标的讨论,请参阅historical_notes.txt。
python导出依赖包
Python导出项目依赖包
python项目开发完后,需要部署到生产或其他环境下,为了快速安装当前项目所需要的依赖包,常规的做法:
1 | pip freeze > requirements.txt |
此方法是导出pip安装的所有依赖包,而不仅仅是当前项目,这么做显然没有必要。
python 提供了pipreqs包解决这个问题。
1.安装pipreqs
1 | pip install pipreqs |
2.进入当前项目根目录下执行
1 | pipreqs . --encoding=utf8 --force |
“.” 指的是将导出依赖包的文件放在当前目录下
“–encoding=utf8” 指的是存放文件的编码为utf-8,否则会报错
“–force” –force 强制执行,当生成目录下的requirements.txt存在时强子覆盖
3.在新的环境下,进入项目根目录执行以下脚本完成所有依赖包的安装
1 | pip install -r requirements.txt |
这样做的好处可以保证依赖包的版本跟开发环境一样,避免了很多坑。
HowtoReadPaper
How to Read a Paper
ABSTRACT
研究人员花费大量时间阅读研究论文。然而,这项技能很少被教授,导致了许多不必要的努力。本文概述了一种实用且高效的三遍阅读研究论文的方法。同时,我还描述了如何使用这种方法进行文献调查
1. 引言
研究人员必须阅读论文的几个原因:为了为会议或课程审查论文,为了保持对其领域的了解,或者为了对新领域进行文献调查。一个研究人员可能每年会花费数百小时来阅读论文。
高效阅读论文是一项至关重要但很少被教授的技能。因此,初入研究生阶段的学生必须自行通过试错来学习。这个过程中,学生会浪费很多精力,而且经常会感到沮丧。
多年来,我一直使用一种简单的方法来高效阅读论文。本文介绍了“三遍阅读”的方法及其在进行文献调查中的应用。
TinyHttpd源码分析
TinyHttpd源码分析
前言
最近在分析固件,逆向完后反编译得到的伪代码看到不是特别懂,自我感觉是对web服务器端的Http请求处理流程比较模糊,正好之前学习《IoT安全入门》课程的时候提到过一个比较轻量的服务端程序Tinyhttpd,俗话说的好”麻雀虽小,五脏俱全”,之前听课的时候没有好好学,特此来补课留档。
Tinyhttpd简介
Tinyhttpd是J.David Blackstone在1999年写的一个不到500行的超轻量型Http服务端程序,通过阅读代码,可以帮助我们理解Web服务器程序的本质。
Tinyhttpd主页地址:https://tinyhttpd.sourceforge.net/
注:分析该源码需要了解Http报文的相关知识,这里就先不介绍了(以后有空的话可能补上),大家可以自行百度、Google或者ChatGPT学习。
hexo静态博客搭建
本文字数: 256 阅读时长 ≈ 1 分钟
shell脚本基础入门学习
Shell 脚本
参考书籍:《Linux C一站式编程》
注:由于书比较老,部分内容可能已过时。
1. Shell 的历史
Shell 的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。