C
文章平均质量分 92
KingRumn
An old boy with peaceful heart but remarkable perseverance!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DBUS源码剖析之DBusMessage消息生命周期管理
D-Bus消息生命周期管理采用引用计数和锁定机制确保消息一致性。消息生命周期包括创建、填充、锁定、发送、接收和释放阶段。锁定机制通过dbus_message_lock()实现,防止传输中被修改。引用计数使用原子操作管理内存,dbus_message_ref()增加计数,dbus_message_unref()减少计数并在归零时释放。消息复制通过dbus_message_copy()实现,复制所有内容用于多目标发送或异步处理。自动清理宏dbus_clear_message()可避免内存泄漏。原创 2026-01-07 08:30:00 · 934 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage消息序列化和反序列化
D-Bus消息序列化与反序列化机制摘要: D-Bus使用二进制格式进行消息传输,通过序列化(marshaling)将DBusMessage转换为网络字节流,反序列化(demarshaling)则从字节流重建消息。序列化采用零拷贝设计,支持字节序对齐和紧凑二进制格式,通过dbus_message_marshal()函数实现。反序列化使用DBusMessageLoader解析器,验证消息完整性后重建消息结构。关键特性包括消息锁定确保一致性、高效数据复制和所有权转移。原创 2026-01-06 07:30:00 · 908 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage消息迭代器(DBusMessageIter)
DBusMessageIter 是 D-Bus 消息参数处理的迭代器,支持读取和追加两种模式。它采用栈分配设计,可以安全复制,主要用于遍历消息参数、添加参数和处理复杂容器类型(数组、结构体等)。迭代器结构隐藏了实现细节以保持 ABI 兼容性,内部包含读取器或写入器。初始化分为读取模式(dbus_message_iter_init)和追加模式(dbus_message_iter_init_append)。原创 2026-01-05 07:15:00 · 1291 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage消息参数处理
摘要 D-Bus消息参数处理主要通过两种方式:便捷函数(dbus_message_append_args/dbus_message_get_args)和迭代器(DBusMessageIter)。便捷函数适用于简单场景,支持基本类型参数、数组和Unix文件描述符的处理。添加参数时需要传递类型-值对,并以DBUS_TYPE_INVALID结束。对于数组参数,需特别注意指针传递方式;文件描述符传递则通过Unix域套接字实现,函数内部会自动复制fd。复杂类型处理需使用迭代器,便捷函数存在对复杂类型支持有限的问题。原创 2026-01-04 08:30:00 · 974 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage消息头
D-Bus消息头(DBusHeader)是D-Bus消息的元数据部分,包含路由信息、消息类型和标志等关键数据。它由16字节固定部分和可变长度字段数组组成,采用网络字节流格式。固定部分包含字节序、消息类型、标志、协议版本、消息体长度、序列号和字段数组长度。字段数组则存储路径、接口、成员等路由信息,每个字段以变体类型编码并8字节对齐。消息头支持延迟解析和缓存优化,与消息体分开存储,便于网络传输和处理。这种设计实现了高效的路由、类型识别和请求-回复匹配功能。原创 2026-01-03 08:00:00 · 1002 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage消息类型及创建
本文介绍了D-Bus消息系统中的4种基本消息类型及其用途,重点分析了 D-Bus定义了4种核心消息类型:方法调用(METHOD_CALL)、方法返回(METHOD_RETURN)、错误(ERROR)和信号(SIGNAL),每种类型有特定的通信方向和用途。原创 2026-01-02 07:30:00 · 1155 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage数据结构
D-Bus消息(DBusMessage)是D-Bus IPC系统的基本通信单元,包含消息头和消息体两部分。消息类型包括方法调用、方法返回、信号和错误消息。消息生命周期涵盖创建、填充、锁定、序列化、传输、反序列化、使用和释放等阶段。内部数据结构采用引用计数管理生命周期,包含消息头、消息体、锁定标志等字段,支持网络字节流序列化和资源跟踪功能。该设计实现了进程间通信的安全性和可靠性。原创 2026-01-01 07:45:00 · 1689 阅读 · 0 评论 -
DBUS源码剖析之内存与内存池
D-Bus 实现了一套高效的内存管理机制,主要包括:1) 封装系统 malloc 的内存分配函数,提供调试功能和跨平台一致性;2) 内存池优化技术,减少碎片和提高小对象分配性能。内存分配函数统一处理零字节分配,并支持调试模式下的内存保护。内存池通过块分配和空闲链表管理,优化了频繁的小对象分配场景。这些机制虽然不公开为 API,但显著提升了 D-Bus 的性能和可靠性。原创 2025-12-31 08:00:00 · 1619 阅读 · 0 评论 -
DBUS源码剖析之编译器属性扩展
D-Bus 源码中广泛使用__attribute__编译器属性来增强代码质量,主要包括: 类型安全检查:通过_DBUS_GNUC_PRINTF验证printf格式字符串 内存管理优化:使用DBUS_MALLOC和DBUS_ALLOC_SIZE标记内存分配函数 错误处理:_DBUS_WARN_UNUSED_RESULT强制检查返回值 代码优化:_DBUS_GNUC_NORETURN标记不返回函数 兼容性处理:通过宏定义在不支持编译器上自动降级 这些属性在dbus-macros.h中统一管理,确保跨平台兼容性。原创 2025-12-30 18:36:21 · 746 阅读 · 0 评论 -
DBUS源码剖析之DBusString数据类型
保护机制检查时机作用断言检查每次操作前检查基本约束和内部一致性最大长度限制设置长度时防止超过系统限制整数溢出检查增加长度时防止整数溢出导致的安全问题边界检查访问数据时防止越界访问自动重新分配空间不足时自动扩展,但不超过最大长度返回值检查所有修改操作让调用者知道操作是否成功关键设计原则防御性编程:假设所有输入都可能有问题多层检查:不依赖单一检查机制失败安全:操作失败时返回错误,不破坏数据显式错误处理:通过返回值明确告知调用者对齐维护每次内存重新分配后,调用。原创 2025-12-30 07:43:16 · 1287 阅读 · 0 评论 -
DBus源码剖析之项目架构设计
D-Bus(Desktop Bus)项目由于发起,旨在为 Linux 桌面环境提供一个统一的进程间通信(IPC)机制。原创 2025-12-29 18:20:53 · 1346 阅读 · 0 评论 -
Linux进程间通信之D-Bus
D-Bus(Desktop Bus)是一种高级的进程间通信机制,主要用于Linux桌面环境和系统服务之间的通信。D-Bus提供了一个消息总线系统,允许应用程序之间进行异步通信,支持方法调用和信号等通信模式。此外,D-Bus还提供了标准化的属性访问机制,通过接口的方法调用来实现对象属性的读取和设置。原创 2025-12-26 07:25:34 · 896 阅读 · 0 评论 -
Linux进程间通信之通信模式
单向通信:简单、高效,适合数据流处理双向通信:灵活,适合客户端-服务器模式消息传递:保持消息边界,适合结构化数据方法调用/RPC:类似函数调用,适合服务调用信号/事件通知:异步、低延迟,适合事件驱动属性访问:面向对象,适合配置和状态管理发布/订阅:解耦,适合事件驱动架构共享状态:最高性能,适合大数据量和频繁通信通信方向:单向、双向还是多向同步性:同步还是异步数据量:小、中还是大性能要求:延迟和吞吐量要求复杂度:简单还是复杂场景功能需求:是否需要服务发现、持久化等高级功能。原创 2025-12-25 07:41:12 · 828 阅读 · 0 评论 -
Linux信号之fork安全性
虽然fork()多线程程序: 可能导致锁状态不一致和死锁正在执行 I/O 操作: 可能导致缓冲区状态不一致正在执行内存操作: 可能导致堆状态不一致推荐做法: 在信号处理函数中只设置标志或使用管道通知主程序, 然后在主程序中安全地调用fork()原创 2025-12-25 07:40:42 · 938 阅读 · 0 评论 -
Linux信号之标准信号可以用sigqueue排队吗
特性标准信号 (使用 kill)标准信号 (使用 sigqueue)实时信号 (使用 kill/sigqueue)排队能力❌ 不排队⚠️ 有限排队✅ 完全排队相同信号数量只保留 1 个队列中只保留 1 个可以排队多个数据传递❌ 不支持✅ 支持 (siginfo_t)✅ 支持 (siginfo_t)信号丢失✅ 可能丢失⚠️ 可能丢失 (队列满时)❌ 不会丢失 (受资源限制)FIFO 顺序N/A⚠️ 部分支持✅ 完全支持资源限制N/A受 RLIMIT_SIGPENDING。原创 2025-12-24 07:38:24 · 969 阅读 · 0 评论 -
Linux信号之定时器与SIGALRM
SIGALRM是 Linux 系统中专门用于定时器通知的信号. 它由内核定时器机制触发, 用于在指定时间后通知进程.SIGALRM是一个标准信号(信号编号 14), 可以被捕获和处理.原创 2025-12-24 07:37:02 · 1194 阅读 · 0 评论 -
Linux信号之信号安全
信号处理函数必须只调用信号安全函数使用在信号处理函数和主程序之间通信最小化信号处理函数, 只做必要的工作使用管道或 signalfd 将信号转换为 I/O 事件避免在信号处理函数中使用全局状态。原创 2025-12-23 07:47:00 · 1348 阅读 · 0 评论 -
Linux同步机制之信号量
System V信号量是内核提供的同步原语,用于进程间的互斥与资源计数。它通过计数器实现P操作(减1)和V操作(加1),支持阻塞机制和原子操作。主要API包括semget创建信号量集、semop执行PV操作、semctl控制信号量。典型应用包括互斥锁(初值1)和资源池(初值N)。使用时需注意键值管理、初始值设置、资源清理和死锁避免。优点在于强大的同步能力,缺点是API复杂且有系统限制。适用于进程同步、生产者-消费者等场景,但不适合简单通信。原创 2025-12-13 22:26:12 · 854 阅读 · 0 评论 -
Linux进程间通信之内存映射
内存映射(mmap)是一种高效的文件I/O和进程间通信机制,它通过将文件或设备映射到进程地址空间,使进程能像访问普通内存一样访问文件内容。mmap支持文件映射和匿名映射两种方式,前者用于文件操作,后者用于进程间通信。其核心优势包括零拷贝访问、共享内存区域和按需加载机制。系统调用包括mmap()创建映射、munmap()取消映射和msync()同步数据。示例展示了如何使用mmap进行文件读写和多线程/多进程间的安全数据共享,其中多进程通信需要特殊处理互斥锁的进程间共享属性。原创 2025-12-13 21:14:46 · 709 阅读 · 0 评论 -
Linux进程间通信之共享内存与消息队列的竞争问题(同步策略)对比
消息队列与共享内存的竞争问题对比分析 消息队列在内核层面实现了原子操作保护,确保发送、接收和删除操作的并发安全性,但应用层仍需处理逻辑竞争(如消息接收顺序、队列删除竞争等)。相比之下,共享内存缺乏内核保护,存在严重的数据竞争风险,必须借助信号量等同步机制实现互斥访问。消息队列适合简单通信场景,而共享内存虽高效但需额外同步开销。开发者应根据场景需求选择:消息队列适用于无需复杂同步的通信,共享内存则适合高性能但能承担同步成本的数据共享。原创 2025-12-12 15:47:39 · 1567 阅读 · 0 评论 -
Linux进程间通信之共享内存
摘要:共享内存是System V IPC中最快的进程间通信方式,允许多个进程直接访问同一物理内存区域,实现零拷贝数据传输。通过shmget()创建/获取共享内存,shmat()附加到进程地址空间,shmdt()分离,shmctl()删除。需配合信号量等同步机制防止竞争条件。优点是高速、高效、灵活,缺点是需手动同步和管理。适用于大数据量、高性能要求的进程通信场景,但需注意资源清理和权限设置。典型应用包括频繁通信的多进程数据共享。原创 2025-12-11 17:08:15 · 678 阅读 · 0 评论 -
Linux进程间通信之消息队列
消息队列是一种System V IPC机制,允许进程通过消息进行通信。每条消息包含类型和正文,接收方可按类型选择性接收。消息队列由内核维护,具有持久性直到显式删除。主要特点包括:消息边界明确、一对一消费模式(消息被接收后即删除)、任意进程间通信。通过msgget()创建队列,msgsnd()发送消息,msgrcv()接收消息。1对多通信需发送多条不同mtype的消息。系统调用包括msgget()、msgsnd()、msgrcv()和msgctl(),分别用于创建、发送、接收和控制消息队列。原创 2025-12-10 15:06:23 · 1074 阅读 · 0 评论 -
Linux进程间通信之命名管道(FIFO)
命名管道(FIFO)是一种特殊文件,允许任意进程通过文件系统路径进行通信。它通过mkfifo()创建,支持阻塞和非阻塞模式操作。FIFO具有单向通信特性,数据在内核缓冲区传输,不写入磁盘,性能接近普通管道。优点是跨进程通信简单高效,缺点是单向传输且需处理阻塞问题。适用于需要简单进程间通信的场景,但不适合复杂消息传递需求。原创 2025-12-09 17:08:07 · 820 阅读 · 0 评论 -
Ubuntu 64位编译32位程序
title: Ubuntu 64位编译32位程序背景一般情况下,一个平台上只能编译当前平台对应的应用程序,比如,64位平台编译64位应用程序,但是随着64位平台的普及,多数采用了64位操作系统,而有时又基于某些原因需要编译出32位的应用程序.本文旨在说明如何在64位操作系统上编译出32位应用程序.准备确认主机为64位架构的内核,应该输出为amd64$ dpkg --print-ar...原创 2019-05-20 17:39:24 · 2863 阅读 · 0 评论 -
lua字节码混淆与反编译
title: luadec相关的一些总结背景在做openwrt相关的路由器时,为了更好的保护lua脚本的代码,通常会选择采用luac进行混淆,这样就需要稍微研究一下如何进行混淆和解密。本文所使用的混淆是lua源代码中带的luac,解密采用的是viruscamp/luadec 的解密工具。混淆、解析和反编译的前提是对文件格式的定义是一致的,因而一般需要把格式定义在lua解释器的源码中,并在适当...原创 2019-05-20 17:21:27 · 13786 阅读 · 0 评论
分享