文章
40
标签
48
分类
17
Home
Tags
Categories
Ya0rk の Blog
Home
Tags
Categories
CPP基础.md
发表于
2025-08-07
|
CPP
volatile关键字volatile是CPP/C中的一个类型修饰符,代表其后面的被修饰的变量是易变。比如一个变量a在多线程环境中会被频繁访问和修改,那么我们就需要使用这个关键字修饰。 访问被修饰的变量会“直接从原始内存地址”获取。 因此编译后的程序每次读取或存储该变量时,编译器不会优化,而是直接访问存放该变量的原始地址。 如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
WebBench源码阅读.md
发表于
2025-08-07
|
源码学习
Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。 仓库地址 项目结构 代码细节main 首先使用getopt_long解析参数并初始化程序。 while((opt=getopt_long(argc,argv,"912Vfrt:p:c:?h",long_options,&options_index))!=EOF ) { switch(opt) { case 0 : break; case 'f': force=1;break; case 'r': force_reload=1;break; case '9': http10=0;break; case '1': ...
任务管理器
发表于
2025-03-14
|
OS
设计思路在原始的rcore中,使用TASK_MANAGER来管理任务和作为任务调度队列,但是我们的os是无栈协程实现,实现了自己的TASK_QUEUE任务调度队列,所以TASK_MANAGER就只需要管理当前有哪些任务,方便可以通过pid或tid快速定位到TCB。在这样的场景下,很容易想到使用HASH_MAP结构,可以在O(1)的时间复杂度下完成插入、访问和删除。
多核任务调度
发表于
2025-03-13
|
OS
背景调研以往的优秀作品中,大部分的任务调度队列使用的是全局队列,即将所有任务都放在一个fifo队列中,这样可以简化调度策略,方便代码设计。但是这样设计的缺陷也是显而易见,在多核情况下,每个核add、fetch任务都需要对全局队列进行加锁,这样会造成大量的锁竞争和等待,降低cpu利用率。 为了提高性能减少锁竞争,我们在xv6 lab8:lock的提示下想到可以将全局队列拆分给每个核的单独队列,同时保留一个全局优先队列。 设计思路基于工作窃取机制,每个核会先从全局优先队列中fetch任务,这里面放的是被信号唤醒的任务;如果没有优先任务,那么再从自己的队列中取任务执行;这样极大地减少了锁竞争的出现。但是这里又会出现一个极端情况,当存在大量的优先任务时,普通任务会出现饥饿现象,同时这样的设计也会退化到最初版本。所以需要为工作窃取机制找到合适的工作场景才能最大化提高性能。 暂时的实现: #![no_std]extern crate alloc;use alloc::collections::VecDeque;use core::future::Future;use core::sync::ato ...
protobuf
发表于
2025-03-12
|
pwn
工具安装 python环境搭建:本人使用的是python3和pip3: pip3 install protobuf pyqt5 pyqtwebengine requests websocket-client pbtk安装 git clone https://github.com/marin-m/pbtk 进入这个文件夹就可以使用工具了。 工具使用 如果我们是从题目给的二进制文件提取结构体: ./pbtk/extractors/from_binary.py ./pwn 会在当前文件夹下生成一个message.proto文件。 使用工具将message.proto编译为python文件,这样就能在我们的exp中导入这个python,然后就能使用message.proto中的结构体了。 在message.proto文件路径下使用(注意工具路径换为自己的) /home/tools/pbtk/utils/external/protoc/protoc --python_out=./ ./message.proto 执行完后会生成如下python文件: 最后就是在ex ...
git使用.md
发表于
2025-03-09
|
杂项
代理 代理查看 git config --global http.proxygit config --global https.proxy 设置代理 git config --global http.proxy http://<proxy_host>:<proxy_port>git config --global https.proxy https://<proxy_host>:<proxy_port> 取消代理设置 git config --global --unset http.proxygit config --global --unset https.proxy 删除文件git rm --cached可以从版本控制中删除文件,但是保留在本地工作目录中的副本。 用途: 不想跟踪特定的文件或文件夹,例如大型数据文件、自动生成的文件或者敏感信息。 已经误将不应该被版本控制的文件添加到了 Git 中,需要将其从版本控制中移除。 调整 .gitignore 文件,使得新的忽略规则生效。有时候,即使你在.gitignore中 ...
rustup包管理器.md
发表于
2025-03-09
|
rsut
安装首先安装 Rust 版本管理器 rustup 和 Rust 包管理器 cargo,这里我们用官方的安装脚本来安装: curl https://sh.rustup.rs -sSf | sh 安装对应版本的nightlyrustup toolchain install nightly-2025-01-18 然后切换到对应版本的nightly: rustup default nightly-2025-01-18-x86_64-unknown-linux-gnu 最后验证: y@Linux:~/Downloads$ rustc --versionrustc 1.86.0-nightly (6067b3631 2025-01-17)
锁.md
发表于
2025-03-08
|
OS
Mutex这是简单的互斥锁,只允许一个线程访问数据空间,无论是读还是写都需要获取锁。所以他的使用场景比较受限(例如需要频繁写操作)。他的缺点也是显而易见,如果读操作频繁,可能会导致性能瓶颈。 RwLock可以使用kernel_sync包中的读写锁。 这个包针对内核环境进行了优化,可能更适合低延迟和高吞吐量的场景。 特点: 允许多个线程同时读取数据,但是写操作是独占的。 适用于读操作远多于写操作的场景(缓存、配置数据等)。 SyncUnsafeCell替换Mutex提高性能SyncUnsafeCell作用: 获取可变数据:在Rust 中,默认情况下,数据是不可变的,且不能在多个线程之间共享可变数据。SyncUnsafeCell 允许你在多线程环境中共享可变数据。 内部可变性:SyncUnsafeCell提供内部可变性,可以在不获取可变引用情况下修改其内容。 安全性:他通过同步机制确保了对UnsafeCell的安全访问。
博客使用
发表于
2025-03-05
|
hexo
下载Hexo需要有npm和nodejs: npm install -g hexo-cli 创建一个文件夹管理博客文章 my_blog.并初始化项目: hexo init my_blogcd my_blognpm install 文章创建hexo n --path 目录/文章名 文章部署和发布生成静态文件: hexo g 部署: hexo d 启动本地服务器预览: hexo server 缓存清除缓存文件可能会影响生成结果,尤其是在修改主题或配置后。清除缓存可以确保生成的文件是最新的。 1. 使用 Hexo 命令清除缓存运行以下命令清除 Hexo 缓存: hexo clean 这会删除 public 文件夹(生成的静态文件)和 .cache 文件夹(缓存文件)。 2. 手动删除缓存文件夹如果 hexo clean 没有完全清除缓存,可以手动删除以下文件夹: .cache:Hexo 的缓存文件夹。 db.json:Hexo 的数据库文件(位于项目根目录)。 public:生成的静态文件。 运行以下命令手动删除: rm -rf .cache db.json public ...
docker镜像
发表于
2025-03-05
|
docker
如何使用别人打包好的docker镜像使用load进行从tar文件导出镜像。 docker load -i xxx.tar 查看镜像是否加载成功: docker images 运行容器使用 docker run 命令运行镜像。 docker run -d --name mycontainer myuser/myapp:1.0 -d:以后台模式运行容器。 --name mycontainer:为容器指定一个名称(可选)。 myuser/myapp:1.0:要运行的镜像名称和标签。 如果需要映射端口或挂载卷,可以添加参数: docker run -d -p 8080:80 --name mycontainer -v /host/path:/container/path myuser/myapp:1.0 -p 8080:80:将主机的 8080 端口映射到容器的 80 端口。 -v /host/path:/container/path:将主机的目录挂载到容器中。
rust异步运行时设计
发表于
2024-11-05
|
rust
在了解无栈协程前,我们先看看有栈的情况,其实这就是普通的函数调用。 有栈协程在c语言中,函数调用和返回过程中会使用栈上数据进行恢复调用前状态。程序总体上是同步顺序运行的,他们都使用同一个栈。但是随着不断地函数调用,这个栈会越来越深,所以会带来极大的开销。 而有栈协程中的有栈到底是什么意思,这里其实是约定成俗想表达对于每个新创建的协程来说:他们都独立运行与一块新的栈,这块栈是从堆(基于mmap维护了整个内存管理)上面申请的,没用共用系统栈,那么这个协程的生命周期和上下文都能够被完整保存,可以被任意时间和任意线程独立执行 go 创建协程在golang中可以使用go关键字创建协程,在创建后整个函数与当前的主线程没有瓜葛,相当于单独开辟一个栈给这个程序使用。 go func(){ fmt.Println("this is a goroutine print!") } 这里就不深入了解了,主要是需要学习无栈协程。 无栈协程协程的实现需要保存上下文,但是我又不能依赖栈,因为这样可能会带来其他开销,那我们该如何做到呢?带着这个疑问我们看看ru ...
网络威胁
发表于
2024-09-22
|
论文
引入CTI输入是关于网络安全的原始数据,而输出是可以帮助未来主动网络安全防御决策的知识,包括限制网络攻击程度和预防网络攻击的策略。 利用CTI实现对攻击者攻击行为做出正确的反应。(就是主动防御?后发制人)并且揣测攻击者接下来的行为。 网络威胁情报挖掘方法与分类研究方法六个步骤:网络场景分析、数据收集、CTI相关信息提炼、CTI知识获取、绩效评估和决策。 网络场景分析:分析网络攻击的具体场景,在面对攻击时能够快速定位攻击面(方便后序定位攻击手段),制定后序的路线图 数据收集:通过博客、众包平台、国家漏洞库、DIB等 信息提炼:提炼与CTI相关的信息(即文章、段落或句子) 知识获取:在完成CTI相关的信息提炼之后,需要以CTI知识获取的形式进行数据分析,根据用户的需求,精确定位出相关的、准确的信息。 绩效评估:根据我们的预期目标评估提取的CTI的性能。 决策 网络威胁情报挖掘定义与分类我们将网络威胁情报挖掘定义为收集和分析来自各种网络威胁情报数据源的大量信息,以识别与网络威胁、攻击和有害事件相关的信息 类比为医疗过程; 主动防御Cybersecurity Related Entiti ...
1
2
…
4
Ya0rk
文章
40
标签
48
分类
17
Follow Me