- 博客(434)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注

原创 C++11 并发指南九(综合运用 C++11 多线程下生产者消费者模型详解)
前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11中的新的基础设施(主要是多线程、锁、条件变量)来阐述一个经典问题——,并给出完整的解决方案。
2023-01-29 13:07:15
4252

原创 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
4575
1

原创 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
3165
原创 进制间的映射关系
不同进制本质上是数值的不同表示方式,具有相互映射关系。八进制和十六进制被视为二进制的简化形式:八进制每3位二进制对应1位(2³=8),十六进制每4位对应1位(2⁴=16)。这种分组方式使长二进制数更简洁,便于计算机领域使用。例如二进制110110111可分组为八进制667,110110111100转为十六进制DBC。不同进制就像不同语言表达同一概念,如二进制1010、十进制10和十六进制A都表示数值10。这种映射源于计算机底层使用二进制,而更高级进制能提高可读性。
2025-07-26 19:36:30
475
原创 进制定义与转换详解
本文系统介绍了进制的基本概念和转换方法。主要内容包括:1. 进制定义(二进制、八进制、十进制、十六进制)及各自特点;2. 进制转换方法(任意进制转十进制、十进制转任意进制、二进制与八/十六进制互转);3. 进制运算规则(加减法原理及示例);4. 计算机中负数的补码表示法。文章通过数学公式和具体示例,详细说明了不同进制间的转换技巧和运算规则,为理解计算机数据表示和编程基础提供了系统指导。各种进制的表示符号、权重计算和转换步骤均有清晰说明,并配有运算示例和总结表格。
2025-07-26 19:17:55
387
原创 高级语言与汇编语言的对应关系详解
高级语言与汇编语言的关系解析 本文通过生动的类比,揭示了高级语言与汇编语言之间的转换关系。高级语言(如C、Python)是程序员易于理解的抽象表达,而汇编语言则是计算机硬件直接执行的底层指令。文章详细阐述了: 两者的本质区别 高级语言:面向开发者,抽象简洁,可移植性强 汇编语言:面向硬件,与特定CPU架构绑定,执行效率高 编译转换过程 描述了从源代码到可执行文件的四个关键步骤:预处理→编译→汇编→链接,并通过GCC命令示例说明具体操作。 常见编程结构的底层实现 用汇编代码展示了变量、条件判断、循环和函数调用
2025-07-26 19:02:18
823
原创 机器语言基本概念
摘要: 机器语言是CPU直接执行的二进制指令(如10111000),执行快但可读性差;汇编语言是其符号化表示(如MOV EAX,1),与机器指令一一对应。两者在逆向工程中用于分析程序逻辑(如函数调用、验证流程)和修改行为(如跳过验证)。通过IDA Pro、Ghidra等工具,可将二进制代码反汇编为汇编语言进行调试与破解。掌握二者转换关系(如B8 01 00 00 00对应MOV EAX,1)是底层开发与安全分析的核心基础。
2025-07-26 18:56:32
447
原创 汇编语言入门:像搭积木一样写代码
汇编语言入门指南 本文介绍了汇编语言的基础知识和在Visual Studio中的环境配置方法。主要内容包括: 环境搭建:详细说明了如何在VS中创建空项目、配置MASM支持以及添加.asm文件。 基础程序结构:展示了一个完整的Hello World汇编程序框架,包含数据段、代码段和系统调用。 关键概念解析: 处理器指令集声明(.386) 内存模型和调用约定(.model) 数据定义语法(db/dw/dd/dq) 函数调用方式(invoke) 数据类型:介绍了字节、字、双字等基本数据类型的定义方法。 过程定义:
2025-07-26 18:51:12
434
原创 Visual Studio逆向工程配置指南:打造你的代码侦探工作室(Win32平台)
本文详细介绍了在Visual Studio中配置汇编语言开发环境的完整流程。从安装基础组件、创建MASM项目、编写测试代码,到配置编译调试环境,逐步指导搭建逆向工程开发平台。文章采用侦探破案的比喻,生动讲解每个配置步骤的作用和原理,包含截图示例和常见问题解决方案,适合逆向工程初学者快速搭建开发环境。最后提供了进阶配置建议和常用代码模板,帮助开发者顺利开启逆向分析工作。
2025-07-26 18:30:43
504
原创 汇编语言中的通用寄存器及其在逆向工程中的应用
汇编寄存器:逆向工程的核心工具 本文系统介绍了x86/x64架构中的通用寄存器系统及其在逆向工程中的应用要点: 寄存器分类: 32位(x86)提供8个通用寄存器(EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP) 64位(x64)扩展为16个寄存器(RAX-R15),并引入新的调用约定 关键特性: 向下兼容16位和8位访问模式 特定寄存器有专门用途(如ECX作计数器、EAX存储返回值) x64架构前4个函数参数通过寄存器传递 逆向工程应用: 通过寄存器使用模式分析函数调用约定 监控关键寄存器值
2025-07-26 18:19:47
503
原创 png封装操作,插值算法,压缩算法
摘要:PDFCorePngManager类提供了一系列处理PNG图像的方法,包括从CFX_DIBitmap提取PNG数据(完整RGBA、单独RGB或Alpha通道)、图像缩放(支持最近邻/双线性/双三次插值)以及PNG压缩(使用libimagequant)。该类还包含辅助功能如写入文件、提取像素数据等,并采用RAII管理资源,确保线程安全。移动端平台(Android/iOS)禁用PNG压缩功能。
2025-07-23 21:00:38
129
原创 MOV DWORD PTR DS:[0x12345678], 0x11223344
您提供的指令 MOV DWORD PTR DS:[0x12345678], 0x11223344 会将 32位(4字节)数据 0x11223344 写入内存地址 DS:[0x12345678] 开始的连续4个字节中。• 地址对齐:若 0x12345678 不是4的倍数(如地址末位是1/2/3),某些架构(如ARM)会触发对齐异常,但x86通常允许非对齐访问(可能有性能损失)。• 现代操作系统通常使用平坦内存模型(段基址为0),因此 DS:[0x12345678] 等效于绝对地址 0x12345678。
2025-07-23 12:33:45
256
原创 内存地址编号和 “地址位宽” 和 “内存寻址的最小单位” 之间的关系
计算机内存寻址的核心原理可概括为: 32位系统为每个进程分配4GB虚拟内存空间,源于32位地址总线的寻址能力上限(2³²=4GB地址),实际物理内存通过分页机制动态映射; 现代计算机以字节(8位)为最小寻址单位,这是历史兼容性、操作效率与硬件设计平衡的结果; 地址位宽(如32/64位)决定可寻址空间大小,而寻址单位(1字节)决定每个地址对应的数据量,二者共同构成计算机内存管理体系的基础设计规范。
2025-07-23 12:18:31
887
原创 libimagequant windows 编译
本文详细介绍了在Windows系统上编译32位和64位版本libimagequant_sys.a静态库的方法。对于32位编译,需要安装i686目标工具链和相应的32位C编译器(MSVC或MinGW),并通过cargo build指定i686目标。64位编译则需使用x86_64目标工具链,可以默认编译或明确指定x86_64目标。文章提供了两种编译工具链的具体配置步骤、验证方法以及常见问题解决方案,帮助开发者顺利完成跨平台静态库的编译工作。
2025-07-14 12:08:39
1224
原创 Rust配置国内源
摘要:本文提供了两种在Windows上加速x86架构Rust项目编译的方法。第一种是通过修改配置文件设置国内镜像源,包括Rustup工具链镜像、Cargo crate下载镜像和Git镜像,同时给出编译优化参数和其他建议。第二种是通过命令行快速设置国内镜像源,包括Rustup和Cargo的环境变量配置,并提供了验证方法和优化建议。两种方式都旨在解决国内用户下载依赖速度慢的问题,推荐使用清华大学或中科大等稳定镜像源。
2025-07-14 12:04:19
447
原创 podofo 一页四个区域写入字符
这段代码实现了一个PDF文档生成工具,主要功能如下: 1. **字符编码处理**: - 包含UTF-8与Unicode编码转换函数,支持1-4字节的UTF-8字符解析 - 提供Unicode到UTF-8的编码转换功能 2. **字体处理**: - 使用FreeType库获取字体文件包含的所有Unicode字符 - 能够提取字体支持的字符集并转换为UTF-8格式 3. **PDF生成**: - 基于Haru PDF库创建PDF文档 - 定义了页面布局参数(边距、行高、区域划分等) - 支持从字体文件中提取字符
2025-07-11 15:39:01
710
原创 libharu一页四个区域写入字符
这段代码实现了一个PDF文档生成工具,主要功能如下: 1. **字符编码处理**: - 包含UTF-8与Unicode编码转换函数,支持1-4字节的UTF-8字符解析 - 提供Unicode到UTF-8的编码转换功能 2. **字体处理**: - 使用FreeType库获取字体文件包含的所有Unicode字符 - 能够提取字体支持的字符集并转换为UTF-8格式 3. **PDF生成**: - 基于Haru PDF库创建PDF文档 - 定义了页面布局参数(边距、行高、区域划分等) - 支持从字体文件中提取字符
2025-07-11 12:18:42
112
原创 libharu写入 unicode区段的字符
本文介绍了一个C++程序,用于生成包含Unicode字符的PDF文档。程序定义了Unicode区块结构体(UnicodeBlock)和常量参数,包括每行字符数(40)、每页行数(120)、字体大小(13px)等排版参数。通过预定义的UNICODE_BLOCKS数组,程序涵盖了从基本拉丁字母(0x0000-0x007F)到通用印度数字形(0xA830-0xA83F)等200多个Unicode字符区块。该程序使用了Haru PDF库和FreeType库,旨在实现Unicode字符的可视化展示和PDF文档生成。
2025-07-10 19:07:18
105
原创 unicode区块定义
本文定义了一个UnicodeBlock结构体,包含起始/结束码点和区块名称,并列出了从0x0000到0xA71F范围内的主要Unicode区块。这些区块覆盖了拉丁字母、希腊字母、西里尔字母、阿拉伯字母、中日韩文字(CJK)以及各种符号和扩展字符集,每个区块通过十六进制范围和相关名称进行标识。该数据结构可用于字符编码处理、语言支持检测等应用场景。
2025-07-10 14:37:49
135
原创 libimagequant 在 mac 平台编译双架构
摘要:本文详细介绍了在 macOS 上编译 libimagequant 双架构通用二进制库的完整流程。首先通过 Rust 工具链分别编译 ARM64 和 x86_64 架构的静态库,然后使用 lipo 命令合并为通用二进制文件。文章包含构建脚本配置、验证方法和常见问题解决方案,最终生成同时支持 Intel 和 Apple Silicon 处理器的静态库。所有步骤均附有终端命令示例和预期输出,确保开发者能够顺利完成跨平台二进制文件的构建。
2025-07-10 10:01:57
321
原创 重置 Rust 工具链
摘要:针对Rust工具链无法找到aarch64-apple-darwin目标核心库的问题,提供了两种解决方案:一是完全重置Rust工具链,包括卸载重装、正确配置目标平台和验证环境;二是针对brew安装的情况,通过Homebrew卸载后重新安装,并配置国内镜像加速。解决方案包含详细的命令行操作、环境变量设置和验证步骤,同时提供了Xcode工具链重置、Docker构建等备选方案。最后强调需检查工具链结构并验证安装,确保能正确编译ARM目标。全文以分步骤的解决方案为主,涵盖从基础到深度的修复方法。
2025-07-10 09:52:37
336
原创 rust cargo 编译双架构的库
摘要:本文提供了解决Rust工具链缺少aarch64-apple-darwin目标平台的完整方案。主要步骤包括安装目标平台、验证安装和重新构建项目。文章还详细说明了常见问题排查方法,如安装失败处理、工具链匹配检查等,并解释了问题成因。针对M1/M2 Mac用户和需要跨平台支持的情况给出了具体建议。最后提醒用户如仍遇问题可提供环境信息以便进一步诊断。(149字)
2025-07-10 09:50:09
458
原创 在 Apple 生态中,`aarch64` 和 `arm64` 本质上是相同的架构
在 Apple 生态中,aarch64 和 arm64 都指代 64 位 ARM 架构(ARMv8-A),本质相同但使用场景不同。aarch64 是 ARM 官方名称,而 arm64 是 Apple/LLVM 的惯用命名。Rust 开发需使用 aarch64-apple-darwin 目标三元组,Xcode 则识别 arm64。虽然二进制完全兼容,但在跨平台构建、条件编译等场景需注意术语差异:Rust 条件编译用 #[cfg(target_arch = "aarch64")],Xcode
2025-07-10 09:22:04
290
原创 Rustup 安装加速:使用国内镜像源解决下载慢问题
Rustup 安装加速:使用国内镜像源解决下载慢问题当你在国内使用 rustup default stable 命令时,由于默认从国外服务器下载,速度可能会非常慢甚至失败。以下是几种有效的加速方法:
2025-07-10 09:17:27
562
原创 【无标题】
摘要:本文介绍了一个用于批量安装静态库的Python脚本,主要通过vcpkg包管理器实现。脚本自动检测vcpkg安装位置,为指定库添加静态构建后缀,检查已安装库避免重复安装,并提供详细的日志记录和错误处理。使用方法包括准备Python环境、修改配置库列表和运行脚本。脚本支持自定义平台架构、超时设置和日志路径,适用于需要静态链接依赖项的C++项目开发环境配置。注意事项包括静态库构建耗时较长、部分库可能不支持静态构建等。
2025-07-10 07:54:48
680
原创 「macOS 系统字体收集器 (C++17 实现)」
macOS字体收集工具摘要 这是一个专为macOS设计的C++17字体文件收集工具,主要功能包括: 核心功能: 智能扫描系统字体目录和用户指定路径 支持.ttf/.otf/.ttc等常见字体格式 自动处理权限限制和文件冲突 提供详细的操作日志 技术实现: 基于C++17标准,使用<filesystem>库高效遍历目录 采用多线程安全设计 实现双重访问策略确保最大兼容性 典型应用: 设计师字体收集整理 开发者构建字体管理工具 系统字体备份维护 扩展性: 可扩展GUI界面 支持添加网络下载功能 可集
2025-07-09 17:48:44
371
原创 字体 Unicode 区块字符展示 PDF 生成器
Unicode 字体字符集可视化工具是一个基于 C++17 开发的实用程序,用于分析和可视化字体文件中的 Unicode 字符。该工具通过 FreeType 库扫描 TTF/OTF 字体文件,提取支持的 Unicode 字符,并按 Unicode 15.0 标准区块分类。核心功能包括字体扫描、字符提取、区块分类和 PDF 生成(使用 Haru PDF 库)。工具可自动生成多页 PDF 文档,展示彩色标题、字符网格布局和统计信息,适用于字体设计验证、多语言支持检查等场景。项目采用模块化设计,包含 Unicod
2025-07-09 15:39:22
691
2
原创 podofo 编译找不到 iconv头文件
摘要:本文介绍了使用vcpkg安装PoDoFo库及其依赖项的方法,包括基本安装命令、指定目标平台、CMake集成等步骤。针对编译时找不到iconv头文件的问题,提供了解决方案:在CMake中添加vcpkg路径变量,并将iconv头文件从vcpkg目录复制到afdko/include目录。文章还包含相关命令行示例和截图说明,帮助用户顺利完成PoDoFo库的配置和使用。
2025-07-09 11:32:23
229
原创 jpeg2k jpeg2000 jp2图像的编码和解码封装
摘要 PDFCoreJPEG2000Manager 类封装了高性能 JPEG2000 图像编解码功能,支持 J2K/JP2/JPX 格式的解析与生成。核心特性包括: 解码:输出 RGB/RGBA 格式,可选元数据快速提取(快 3-5 倍) 编码:质量参数可调(1-100),支持三种标准格式 优化设计:RAII 资源管理、异常安全机制、类型安全接口 兼容性:保留旧版 C 接口,同时提供现代 C++ API 典型应用场景包含图像元数据获取、高质量转码等,适用于 PDF 处理等专业领域。注意限制包括不支持渐进式解
2025-07-09 10:56:28
777
原创 PNG图像压缩优化工具
本文介绍了一个基于libimagequant和libpng的高效PNG图像压缩优化工具。该系统提供三种级别的压缩算法:基础压缩(标准量化处理)、优化压缩(增强量化参数)和极限压缩(激进颜色减少),分别适用于常规需求、高压缩率场景和极端文件大小敏感环境。工具采用现代C++17实现,具备RAII资源管理、多阶段压缩管道和模块化设计等技术特点,支持透明度保留、颜色相似度合并等特性。性能测试显示,极限压缩模式能比基础压缩提升20-40%的压缩率。该工具适用于网页优化、移动应用资源处理等场景,并提供详细的压缩统计信息
2025-07-04 20:40:06
241
原创 基于libimagequant和libpng的C++ PNG压缩程序
本文介绍了一个使用C++和libpng/libimagequant库处理PNG图像的内存读写实现。代码展示了如何通过自定义删除器管理资源生命周期,使用现代C++特性(如unique_ptr)封装libimagequant对象,并实现内存中的PNG解码和编码。关键功能包括:验证PNG签名、转换图像格式为RGBA8、处理不同位深度和颜色类型,以及通过回调函数实现内存中的读写操作。该实现还提供了安全的错误处理机制,确保资源正确释放,适用于需要高效处理PNG图像而不依赖文件系统的应用场景。
2025-07-04 18:04:33
265
原创 封装一个png的编码解码操作
像素数据与编码图像在图像处理中有着本质区别:像素数据是未经压缩的原始点阵数据(如RGBA格式的连续内存块),可直接用于图像处理操作;而编码图像是经过压缩的二进制数据(如PNG/JPEG格式),包含文件头、元数据等信息,需解码才能使用。两者的转换过程为:编码图像→(解码)→像素数据→(处理)→新像素数据→(编码)→新编码图像。关键差异体现在格式、大小、可处理性、元数据等方面,优化图像处理流程时应避免不必要的编解码开销。 (注:摘要已控制在150字以内,完整保留了原文的核心概念与关键区别,同时省略了代码示例等实
2025-07-04 14:42:44
1131
原创 三五法则的类的设计
C++资源管理法则总结:三法则(C++98)要求同时实现析构函数、拷贝构造函数和拷贝赋值运算符来正确管理资源;五法则(C++11)在此基础上增加了移动构造函数和移动赋值运算符,提升性能;零法则推荐优先使用智能指针和标准库容器自动管理资源,避免手动实现。实践建议:优先采用零法则,必要时遵循五法则。
2025-07-04 11:16:42
247
原创 对libpng的 简单封装,支持分离 和 合并 smask和像素数据,支持对图像进行插值算法进行减小图像大小,支持内存导出和导入png图像
摘要:该代码实现了一个PNG图像处理类PngManager,支持PNG文件的读写操作。主要功能包括:1) 读取PNG文件并解析为像素数据;2) 将像素数据写入PNG文件;3) 分离和合并RGB通道与Alpha通道(smask)。类封装了libpng库,提供了异常处理和内存管理,支持多种像素格式(灰度、RGB、RGBA等)。核心功能通过分离和合并通道实现图像透明度的灵活处理。
2025-07-03 11:22:21
510
原创 png 图像压缩方式 最近邻、双线性、双三次 算法
本文介绍了三种图像插值缩放方法:最近邻插值(速度最快但质量低)、双线性插值(平衡速度与质量)和双三次插值(质量最高但速度最慢)。使用示例展示了如何调用不同插值方法,并分析了各方法的性能特点:最近邻插值适合快速处理但会产生锯齿,双线性插值适用于大多数场景,双三次插值则适合高质量需求。文章还提供了注意事项,包括处理大图像时的性能考虑和边界处理机制。代码实现展示了三种插值算法的具体逻辑,包含边界检查、权重计算等核心功能,支持RGBA通道处理。用户可根据实际需求选择合适的方法,双线性插值被推荐为通用选择。
2025-07-03 10:23:55
456
原创 vcpkg 批量下载库
这是一个Python脚本,用于批量安装数学和多媒体相关的C++库(vcpkg包管理器)。主要功能包括: 自动检测vcpkg安装路径 检查库是否已安装 批量安装16个指定库(mathc/matplotplusplus/mbedtls等) 详细的安装日志记录 错误处理和状态报告 脚本会创建vcpkg_install.log日志文件,记录安装过程和时间戳。每个库安装前会检查是否已存在,安装失败会立即终止并提示错误。该脚本适用于需要自动化部署多个vcpkg库的开发环境。
2025-07-02 22:45:15
232
原创 std::any_of 函数介绍与用法
std::any_of是C++标准库中的算法函数,用于检查给定范围内是否至少有一个元素满足指定条件。该函数接受迭代器范围和一个谓词函数作为参数,当范围内存在使谓词返回true的元素时返回true,否则返回false。示例展示了对数字、字符串等容器检查特定条件的用法。该算法在第一个满足条件元素处即返回(时间复杂度O(1)-O(n)),比手动循环更简洁高效。从C++20开始还提供范围版本std::ranges::any_of。
2025-06-24 11:17:28
179
原创 libharu 按区块写入字符,并限制区块的字符个数
本文介绍了一个用于生成Unicode字符集的PDF文档的C++程序。程序使用Haru PDF库和FreeType库,定义了每页40字符×120行的排版格式,以及字符宽度(13px)、行高(20px)等参数。文中详细列出了65个Unicode区块的编码范围和名称,从Basic Latin(0x0000-0x007F)到Cyrillic Extended(0x2DE0-0x2DFF),覆盖了拉丁文、希腊文、西里尔字母、中文、日文等多种文字系统。该程序可用于创建全面的Unicode字符参考文档。
2025-06-23 14:30:09
109
原创 libharu开源代码进行写入文本字符
摘要:本文介绍了使用libharu开源库生成PDF文档的方法,重点实现了字体字符提取与文本写入功能。代码包含两个核心类:FontUtils利用FreeType获取字体unicode字符集并转换为UTF-8格式;PDFDocument类通过libharu创建PDF文件,设置字体参数(支持TTF/OTF/TTC格式),并按固定行距(20pt)、字号(13pt)和页边距自动分页写入文本。程序每页可容纳40字符×120行,处理UTF-8多字节字符时自动计算字符长度,确保正确排版输出字体所有字符到PDF文档。
2025-06-23 11:58:44
122
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关注的人