- 博客(249)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C++11 并发指南九(综合运用 C++11 多线程下生产者消费者模型详解)
前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11中的新的基础设施(主要是多线程、锁、条件变量)来阐述一个经典问题——,并给出完整的解决方案。
2023-01-29 13:07:15
3983
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
前面三篇文章《C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)》、《C++11 并发指南六( 类型详解二 std::atomic )》、《C++11 并发指南六(atomic 类型详解三 std::atomic (续))》都是采用 C++ 的方式介绍原子对象,本节我会给大家介绍 C++11 原子操作中 C 风格的 API。
2023-01-29 13:04:50
4189
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C++多线程07:thread_local
thread-local storage 和static(或者说global) 存储很类似,每一个线程都将拥有一份这个数据的拷贝,对象的生命周期从线程开始时开始(对于全局变量),或者首先分配空间。当线程退出的时候对象析构;一般在声明时赋值,在本thread中只执行一次。当用于类成员变量时,必须是static的。C++11 thread_local用法 - 知乎 (zhihu.com)存储类说明符 - cppreference.com。
2023-01-20 15:47:40
2864
原创 libharu维基页面
在Windows环境中,如果将Haru构建为共享库,错误处理函数的定义需要使用__stdcall调用约定。LibHaru 定义了一系列错误代码来指示可能遇到的各种错误情况。这些错误代码覆盖了从内存分配问题、文件I/O错误、无效的参数设置到不支持的功能或格式等。了解这些错误代码及其含义对于调试和解决使用 LibHaru 库时遇到的问题至关重要。如果遇到未定义的错误代码,可能需要查阅库的文档或源代码以获取更多信息。在LibHaru中,绘制矢量图形涉及到设置图形状态、构造路径、以及对路径进行填充或描边的操作。
2024-06-16 19:39:15
684
原创 编译 libpng zlib mozjpeg libjpeg-turbo 失败的解决方法
在使用vcpkg安装这些库之前,请确保你已经正确安装并配置了vcpkg。以下是在Windows环境下,使用vcpkg安装libpngzlibmozjpeg, 和的命令序列。这些命令假设你已经在命令行中进入了vcpkg的根目录。由于libpng依赖于zlib,vcpkg在安装libpng时会自动处理zlib的依赖关系。mozjpeg是一个JPEG库,提供更好的压缩效率。libjpeg-turbo是另一个JPEG库,以其高速度而闻名。
2024-06-01 21:49:49
362
原创 cjpeg
前一行通过函数指针调用错误管理器的重置函数,确保错误状态被清空。后一行则初始化输出目标,准备接收压缩后的数据。标志决定压缩的起始状态:如果是处理原始数据输入(即无须颜色转换或下采样的数据),则状态设为。函数来根据当前的压缩参数选择和初始化所有需要的压缩模块,这包括编码器、系数处理器等。方法,为压缩的第一遍处理做准备,这可能包括设置内部状态变量、初始化工作内存等。最终,该函数完成了JPEG压缩过程的初始化,使得应用程序可以通过调用如。计数器重置为0,表示从图像的第一行开始处理。只能在压缩开始状态被调用。
2024-05-29 01:03:43
504
原创 libjpeg_example.txt
******************** JPEG 压缩示例接口 ********************//******************** JPEG解压样本接口 ********************//* cinfo->err 实际上指向 my_error_mgr 结构,因此强制指针 */(void)jpeg_read_scanlines(cinfo, 缓冲区, 1);/* 步骤3:使用jpeg_read_header()读取文件参数 *//* 返回给调用者 */
2024-05-26 23:10:11
259
原创 2C++类和对象(二)
/类体:由成员变量和成员函数组成 };//注意后面的分号其中class为定义类的关键字,className为类的名字,{}中为类的主体,注意定义结束时加上后面的分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量,类中的函数称为类的方法或者成员函数。1、声明和定义全部放在类体中。需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2、声明放在头文件(.h)中,定义放在源文件(.cpp)中。注意:一般情况下,更期望采用第二种方式。
2024-04-07 22:42:31
1068
原创 1C++入门基础(一)
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此,C++是基于C语言而产生的,它既可以进行。
2024-04-07 22:41:54
735
原创 kylin v10 配置 rime 输入法
找到 ibus 首选项,选择 输入法 ————》 添加 ————》 中文 ——————》 rime .网上选择 一个 rime 方案(雾凇 rime)将文件全部复制到这个rime 文件夹下。
2024-02-20 16:44:07
313
原创 Linux Rootkit实验|0201 基本功能之Root后门
内核中的事情,真的是要细心。顺着FreeBuf的文章往下看时,这个地方少分配了一个尾零。事实上应该是另外注意,是:个人以为rootkit应该提供一个能够远程连接的root shell(对于内网的机器,用reverse shell是不是更好),并具备痕迹清理、自我删除甚至更强的反取证功能(另外,是否需要隐藏当前登录用户?
2024-02-03 10:59:16
862
原创 Linux Rootkit实验|0200 基本功能之阻止模块加载
感觉Linux kernel虽然是用C写的,但有很鲜明的面向对象的特点。尤其是在结构体中嵌入函数指针作为成员,几乎就是类+方法的翻版。带着这种背景观点去探索源码可能会好一些,你看到某些结构体,可以猜测它们会不会有对应的一些方法。从探索模块加载过程的旅程来看,阅读内核源码没有想象中的难,也并非枯燥,而是充满了乐趣,也许是因为带着问题去探索吧。我们注意到,上面的通知处理函数使用了锁机制。这是内核编程中经常需要注意的。
2024-02-03 10:57:59
1184
原创 Linux Rootkit实验|01 基于修改系统调用表的Hook
配合着源码在线阅览,边做边能查到内核代码的感觉非常棒。本次实验中的比第一次实验中的grep要方便许多。实验过程中深感自己学识浅薄,静水流深呐。一个朋友在FreeBuf文章下评论说:“写得不错。但获取sys_call_table的地址对hook这一大目标并没有起到多大作用,甚至是多余的。”后来他又说:“回复有所歧义,说不需要知道sys_call_table的地址是针对2.6以前的内核版本,之前的版本可以直接引用sys_call_table变量,多谢提醒!
2024-02-03 10:56:08
1042
原创 Linux Rootkit:内核 5.7+ 的新方法
我们无法轻松地将符号名称解析为内存地址,这意味着我们无法使用 ftrace 挂钩函数(回想一下,我们使用 ftrace 来注册当等于。,他们可以随心所欲地使用任何其他导出的内核函数。获取我们想要挂钩的函数的地址。这是一个非常简单的修复,但说明了一种在不破坏现有支持的情况下处理此类更改的好方法。尽管共享相同的名称,但存储库中实际上有两个略有不同的文件。值得注意的是,截至撰写本文时,可用于 Ubuntu 20.04 的最新内核是。当然,如果我们不是在内核 5.7+ 上进行编译,那么这些都不会触发,并且。
2024-02-03 10:55:20
842
原创 Fancy Bear 是一名伐木工人,没关系 - 深入了解 Drovorub 的内核组件
我认为这是一个广泛的、内核范围的决定,如果采取不同的做法,将会产生很多影响(如果您知道确切的原因,请告诉我!示例中所做的那样) - 尽管我将内核对象硬编码为可执行文件中的数组,但没有理由不能通过相反,这样就不会在文件系统上的任何地方留下内核模块的残余。可悲的是,这只是我的猜测。用户态进程的 PID 很可能作为附加数据的一部分传递给任何需要某种输出的命令(至少在我看来这是有意义的,但我在这里完全猜测)。在这篇文章中,我想介绍一下该内核模块使用的一些技术,以及它与我们在其他文章中已经介绍过的技术的关系。
2024-02-03 01:01:53
605
原创 9隐藏登录用户(无需接触磁盘即可修改文件内容)_Linux_Rootkit.md
通常,每个用户只有其中一个(尽管不一定),并且仅真正用于生成显示驱动程序(X、Wayland 等),或者如果您实际位于服务器上,则仅用于登录会话本身。如果我们得到匹配,那么我们可以继续分配一个内核缓冲区,调用真正的系统调用,并将填充的用户空间缓冲区复制到内核缓冲区中。在直接开始编写内核模块之前(此时,我仍然不确定如何在不覆盖此文件的情况下隐藏用户),我决定编写一个用户空间工具来解析此文件以掌握它的含义布局。(最后一个参数是一个偏移量,我们可以在上面看到它从(文件的开头)开始,并在每次读取时递增。
2024-02-03 00:57:29
1081
原创 8隐藏开放端口_Linux_Rootkit.md
完成上述所有内容的目的是为了说明了解如何构建这些模块所需的内核源代码的研究。源代码告诉我们,这个特定的结构是“套接字的网络层表示”——这听起来就像我们所追求的!并不是真正的文件,而是由内核中分配给不同 IO 操作(打开/关闭/读/写/等)的函数定义的。我们的钩子需要做的就是检查监听端口是否等于我们想要隐藏的端口,如果是则返回,如果不是则。这成为我们的目标,因为如果我们可以控制它,那么我们就可以控制(以及其他类似的)请注意,我们实际上并没有触及内核中的内部套接字表,因此连接的功能完全没有受到损害!
2024-02-03 00:53:52
838
原创 7隐藏进程_Linux_Rootkit.md
因此,我们需要想出一种方法来告诉我们的模块我们想要隐藏哪个 PID。一旦我们将内核模块的其余部分(Ftrace 等)放在一起,我们就可以构建它并尝试它。因此,如果我们隐藏带有我们想要保密的 PID 名称的目录,那么这些用户空间工具将不会注意到该进程的存在!希望您喜欢这个 - 它比平常短一点,但这只是因为这里没有太多新内容,只是我们已经介绍过的技术的巧妙组合。现在我们可以告诉 rootkit 我们想要隐藏哪个 PID,我们必须真正隐藏它!具有我们要隐藏的 PID 名称的文件或目录。),我们还可以隐藏进程!
2024-02-03 00:51:54
587
原创 6隐藏目录_Linux_Rootkit.md
此时,我们意识到我们必须将自己的缓冲区分配到内核空间,在那里修改它,然后将其复制回来(就像第。它仍然在内核中,但由于它不在标头中,因此您的模块将无法构建。(我们希望挂钩两者,但除了 32 位版本中的一小部分添加之外,它们是相同的)。这很有用,因为它让我们可以轻松地跳过内存中的这些结构来查找我们想要的内容。我们需要弄清楚的最后一件事是如何让系统跳过我们发现的以前缀“boogaloo”开头的任何条目。)就像我们一样循环遍历条目,它们将到达我们想要隐藏的条目之前的条目,并且当它将其循环变量增加。
2024-02-03 00:46:30
665
原创 5从用户空间隐藏内核模块_Linux_Rootkit.md
事实上,我们的 Rootkit 仍在运行,这意味着我们仍在内存中,任何形式的内存分析或具有远程能力的 DFIR 专业人员都会很快发现我们(特别是使用“rootkit”之类的名称四处走动!列表中的每一项都不知道自己在大局中的位置,只知道谁在前面,谁在后面。结构作为字段包含在另一个结构中,该结构保存我们链接在一起的对象,更容易且更易于管理。事实上,在我们的内核模块中,我们可以通过查看指向和模块的指针来找出列表中哪些模块在我们之前/之后。请注意,在上面的内核源代码片段中,结构中没有条目或类似内容。
2024-02-03 00:44:57
760
原创 4通过干扰 Char 设备为 PRNG 添加后门_Linux_Rootkit.md
如果我们这样做,我们会看到每次迭代时抛硬币的比例都会改变,但每次运行时都会给出相同的数字!所有系统调用都是如此,但是由于我们的目标都不在系统调用表中,因此我们最好手动检查。正如之前的帖子中提到的,这是通过查看以下内容来完成的。我们已经大大减少了可用的随机性(在这个特定的统计数据的情况下,我们已经将其减少到零!,它有 2 个参数;我们真的应该首先了解一下读取是如何完成的——特别是如果我们想介入这些读取并干扰它们的话!这个函数的内部结构相当不重要,因为我们最终的钩子无论如何都会通过完整调用这个函数来开始。
2024-02-03 00:42:32
1009
原创 04 模块基础 隐藏模块
sysfs 与 procfs 相类似,同样是一个基于 RAM 的虚拟文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用,其中便包括我们的 rootkit 模块信息,sysfs 会动态读取内核中的 kobject 层次结构并在。简单测试,我们可以发现无论是在 procfs 中还是 sysfs 中都已经没有了我们的 rootkit 的身影,而提权的功能依旧正常,我们很好地完成了隐藏模块的功能。的身影,而提权的功能依旧正常,我们很好地完成了隐藏模块的功能。来获取当前内核模块的 module 结构体,
2024-02-03 00:38:30
785
原创 3Root 后门_Linux_Rootkit.md
找到一些相关代码,然后深入挖掘以找到事物的正确定义的过程会一次又一次地出现。部分,那么您就知道我们将如何使用 ftrace 进行挂钩,并且我们将为较新的约定以及 4.17.0 之前的版本。信号的这些名称实际上只是数字(正如您将看到的,内核中的许多东西都是这种情况)。正如这份文件告诉我们的,“一个任务只能改变自己的凭证,而不能改变另一个任务的凭证”。好的,如果您一直在关注,那么请完成您的 hook 和 ftrace 业务的其余部分(请参阅。内核源代码的副本- 这样,你就可以 grep 得到你想要的东西。
2024-02-03 00:35:35
583
原创 2Ftrace 和函数挂钩_Linux_Rootkit.md
首先,我们将看看旧的方法,因为它仍然适用于 Ubuntu 16.04 等发行版,并且一旦旧的方法有意义,新版本就更容易理解。好的,您已经构建了第一个内核模块,但现在您想让它做一些很酷的事情 - 比如改变正在运行的内核的行为。,那么您会发现每个系统调用都有一个分配给它的关联编号(这些编号实际上相当灵活,并且会因不同体系结构和内核版本而异,但幸运的是,我们提供了用一堆宏来帮助我们摆脱麻烦)。,我们只需要自己模仿这个函数声明(一旦我们将钩子放在适当的位置),我们就可以按照我们喜欢的方式使用这些参数。
2024-02-03 00:31:02
693
原创 1简介和工作流程_Linux_Rootkit.md
那么,内核 rootkit 到底有什么作用呢?维基百科将 rootkit 定义为:“Rootkit 是计算机软件的集合,通常是恶意的,旨在允许访问计算机或其软件的某个区域(例如,未经授权的用户),并且经常掩盖其存在或其他程序的存在。软件。当然,作为内核rootkit 意味着我们编写的代码将通过我们将编写的内核模块以内核级权限(ring 0)运行。
2024-02-03 00:28:57
906
原创 Linux 系统开始配置
关于在 Ubuntu 下移除 Snap 软件包做个总结,我想说的是这些处理 Snap 软件包的方法实属无奈。主要是这对新用户来说很困难。我希望这个指南能帮助你处理好 Snap 软件包。完结撒花。本文介绍了 6 个 zsh 插件,每个插件都有特定的场景用途,希望能给大家的日常工作提升效率。
2024-02-02 23:46:28
1090
原创 rime 输入法自定义配置教程
rime 输入法自定义配置教程安装自定义配置基础配置部署编译方案选择样式文件横排显示配色样式输入配置进阶配置字典配置字典获取颜文字输入符号模糊拼音高级配置时间组件Emoji英文输入的支持定制组件我的配置打开我们的Rime,使用过程中。你会发现,它应该是这样的:初始状态乍一看,有一些问题: - 样式复古,有点像以前上世界的界面?- 没有词库,操作一般为了进一步现代化。我们这里对其进行配置。默认情况下的配置文件(配置文件存放在配置目录下;文件注释核心配置、全局配置平台相关配置。
2024-02-02 23:21:48
1762
原创 卸载Ubuntu双系统
我们卸载无论出于哪种原因,我们都是要卸载干净它。下面教大家如何将Ubuntu系统卸载干净,让电脑磁盘重新回到安装前的清爽状态。
2024-02-02 23:13:34
1844
1
原创 CMake Msys2 搭配vscode
MSYS2(Minimal SYStem 2)是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于Linux的shell环境,可以在Windows系统中编译和运行许多Linux应用程序和工具。MSYS2基于MinGW-w64平台,提供了一个完整的开发环境,包括GCC编译器、GDB调试器、Make、Git版本控制系统和许多其他开发工具。除了常用的开发库和工具之外,MSYS2还提供了许多专门针对Windows平台的库和工具,方便开发人员进行跨平台开发和移植工作。
2024-02-02 22:55:25
2207
原创 普通用户添加sudo权限
我们在Linux系统中经常需要根据不同的需求创建对应的新用户, 但是新用户作为一个普通用户, 权限是非常有限的,最后命令还是没能够执行, 原因是没有权限, 最后提示告诉我们, 因此我们只需要将用户sanji添加到这个文件中就可以了, 说干就干。
2024-02-02 10:30:35
568
原创 创建加密分区或者文件
现在,你已经在 GParted Live 环境中,可以使用 GParted 工具来管理你的磁盘分区,包括创建、调整大小、删除、格式化等操作。如果显示的输出大部分是不可读的字符和非打印字符,那么这通常表明文件已经被成功加密,并且在没有解密的情况下无法直接访问其原始内容。总的来说,关闭开机自动挂载后重启系统,会导致系统不再自动处理加密卷的解锁和挂载,你需要手动进行这些操作来访问加密卷上的数据。在系统启动过程中,如果一个加密卷没有设置为自动解锁和挂载,那么它会保持锁定状态,直到你使用正确的密码或密钥通过。
2023-12-28 18:58:26
1395
1
原创 firejail沙盒测试命令
需要注意的是,这个新的/bin目录只在Firejail的沙箱环境中存在,当沙箱关闭时,所有在这个目录中的修改都会被丢弃。列表中的文件和目录必须表示为相对于/opt目录的相对路径,并且不能包含/字符(例如,/opt/foo应表示为foo,但/opt/foo/bar – 表示为 foo/bar – 是不允许的)。列表中的文件和目录必须表示为相对于/srv目录的相对路径,并且不能包含/字符(例如,/srv/foo应表示为foo,但/srv/foo/bar – 表示为 srv/bar – 是不允许的)。
2023-12-27 14:14:45
774
原创 带你手把手解读rejail沙盒源码(0.9.72版本) (八) fnettrace-dns
DNS,全称。采用模式,DNS client发出查询请求,DNS server响应请求。DNS client通过查询DNS server获得主机的 IP 地址,进而完成后续的 TCP/IP 通信过程。当 Windows 系统用户使用命令时,DNS 会自动查找注册了主机名和 IP 地址的数据库,并返回对应的 IP 地址。
2023-12-19 16:47:12
991
原创 带你手把手解读rejail沙盒源码(0.9.72版本) (七) fnetfilter
如果一个进程是"可被核心转储"的,那么当它因为某种原因异常终止时,操作系统会自动或根据配置生成一个核心转储文件。是C编程语言中的一个函数,用于查找第一个字符串(称为“源字符串”)中不包含第二个字符串(称为“拒绝字符串”)中的任何字符的初始子串的长度。总的来说,这个函数主要用于在非root用户运行的进程中检测dumpable状态,并在必要时提供警告和调试信息,以增强系统的安全性。),如果是,则输出帮助信息并返回0。这段代码是用C语言编写的,主要功能是在给定命令和目标文件的情况下,根据特定条件处理它们。
2023-12-19 16:18:22
821
1
原创 ELF文件结构
可重定位文件需要包含描述如何修改节内容的相关信息,从而使可执行文件和共享目标文件能够保存进程的程序镜像所需要的正确信息。重定位表是进行重定位的重要依据。
2023-12-18 16:56:48
981
原创 带你手把手解读frejail沙盒源码(0.9.72版本) (六)fldd
这段代码是一个简单的C程序,主要用于解析ELF(可执行和可链接格式)文件,并输出其中包含的库文件列表。定义了一些全局变量和结构体。实现了一些辅助函数,如用于查找存储在链表中的元素,用于向链表中添加元素等。函数是整个程序的核心,它接收一个ELF文件路径作为参数,然后打开该文件并将其映射到内存中。接着,它遍历ELF文件的各个节区,寻找动态链接器、运行路径和需要的库文件等信息,并将这些信息添加到相应的链表中。函数负责查找给定库文件的实际路径,并递归地解析依赖的其他库文件。函数初始化默认的库搜索路径。
2023-12-18 16:22:44
908
原创 详细解读Linux网络命名空间,veth, birdge与路由
名称空间将全局系统资源包装在一个抽象中,使名称空间中的进程看起来拥有自己的全局资源的独立实例。对全局资源的更改对作为命名空间成员的其他进程可见,但对其他进程不可见。名称空间的一个用途是实现容器。(摘录自中对namespace的介绍)Namespace是Linux提供的一种对于系统全局资源的隔离机制;从进程的视角来看,同一个namespace中的进程看到的是该namespace自己独立的一份全局资源,这些资源的变化只在本namespace中可见,对其他namespace没有影响。
2023-12-15 18:28:12
1416
vcpkg 文档 vcpkg是一款免费的C/C++包管理器,用于获取和管理库 从1500多个开源库中进行选择,只需一步即可下载和
2024-07-20
SELinux:为任何Linux环境带来世界级的安全性! SELinux为Linux/UNIX集成商、管理员和开发人员提供了最
2024-01-16
SELinux by Example
2024-01-16
SELinux Notebook 是一本关于 SELinux 的开源书籍,最初由 Richard Haines创建并捐赠给 SE
2024-01-15
python Django web 联通用户管理系统实训代码
2023-06-16
python Django web 实训项目的实验报告
2023-06-16
《C++17 完全指南》
2023-01-21
C# Asp MVC 五层 .net 学生管理系统main.tar
2022-09-13
网二维数组的动态创建和释放.pdf 网负号重载(1).pdf 网负号重载pdf 赋值号“==“重载(1).pdf 赋值号"==
2022-07-21
git reset 的三个参数.pdf
2022-06-13
C#实现的学生管理系统,期末实训报告
2022-05-15
在派生类的构造函数的初始化列表中,为什么不能包含对基类子对象的初始化。
2021-07-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人