purplesyringa's blog

RSS: https://purplesyringa.moe/blog/feed.rss
Purplesyringa 的个人博客,关于逆向工程和底层编程。

Rust 的 std::process::Command 在 Windows 上是个糟糕的公民

Rust 的 std::process::Command 在 Windows 上无法正确传递句柄给子进程。CreateProcess 的句柄继承机制存在三种组合:bInheritHandles=FALSE 只继承 stdio;TRUE 且无 PROC_THREAD_ATTRIBUTE_HANDLE_LIST 时继承所有可继承句柄;TRUE 且有该属性时只继承列表中指定的句柄。Rust 标准库的行为与这两种安全模式都不兼容,导致写 Windows IPC 库时没有正确方式传递管道、文件或 broker 进程句柄。
评论点赞收藏10 小时前

对"纯Python中的SIMD"的思考——SWAR位运算优化

提出一种SWAR位运算技巧,将Game of Life邻居判断从15步降至6-8步,且不增加每格位宽。核心思路是用加法把比较阈值移到2的幂边界,从而只需检查最高位。该技巧最早可追溯至1987年Alan Mycroft的Usenet帖子。
评论点赞收藏2 天前

关于“纯 Python 中的 SIMD”的思考

我找到了那篇帖子纯Python中的SIMD 作者回溯关于优化生命游戏,觉得这是个好机会聊聊SWAR。在继续之前,请务必先阅读那篇帖子!或者至少浏览一下。
评论点赞收藏21 天前

Teal 语言使用体验回顾:填补 Lua 静态类型空白的尝试与局限

开发者实测Teal语言后认为其虽填补了Lua静态类型检查空白,但工程成熟度仍不足。 使用两个月后,作者指出Teal在类型系统设计和工具链稳定性上存在明显缺陷,许多特性不如预期好用。尽管尊重项目贡献者,但认为目前尚不适合大规模生产环境替代原生Lua。
评论点赞收藏21 天前

PHP 和 Lua 中的对数函数存在非单调性缺陷

如果 a > b > 1,且 x > 1,那么你可以证明:logₐx < logₐx。(提醒一下,logₐx 表示满足 x = a^t 的 t 的值。)仔细想想,这一点非常直观:对于“正常”的数值来说,a 越大,要得到相同的 x 所需的 t 就越小。 然而,如果你去问 PHP 它的看法,它会在少数几种情况下告诉你:“你错了!”?php $x = 2.93; $a = 10 + 2 ** - 49;...
评论点赞收藏23 天前

PHP与Lua中日志函数的非单调性陷阱

PHP和Lua的log函数在特定浮点数边界下出现违反数学单调性的现象。原因是语言内部对特定底数(如10)使用了优化的专用函数(log10),与通用公式混合导致精度误差方向不一致。文章深入分析了libm实现细节及不同语言处理策略,指出这是浮点运算中常见的隐蔽陷阱。
评论点赞收藏24 天前

PHP 与 Lua 中对数函数的单调性陷阱

PHP 和 Lua 的数学库存在一个反直觉 bug:当底数 a > b > 1 时,log_a(x) 理论上应小于 log_b(x),但在特定浮点数精度下,PHP 返回了相等甚至错误的结果。作者指出这并非普通的浮点误差,而是刻意构造的底层实现缺陷。
评论点赞收藏25 天前

排序秩编码:一种高效的 BWT 变换替代方案

我需要一个地方来介绍这个算法,因为它似乎在互联网上没有相关文档,所以就在这里分享给大家。 SRC 是 BWT 基础压缩器中 MTF 的替代方案。而 根据OpenBWT的说法 则是公认的、以压缩比为衡量标准的 MTF 替代方案,如果你不想使用上下文建模的话。
评论点赞收藏32 天前

利用 Phminposuw 实现数据流的最优解析

数据压缩中动态切换编码格式时,贪心分段会导致元数据膨胀且精度不足。作者提出使用 Phminposuw 算法进行全局最优解析,平衡编码效率与元数据开销。
评论点赞收藏33 天前

用一个“无用”的if语句将代码性能提升四倍

通过添加看似冗余的if语句欺骗CPU分支预测,将循环从延迟受限转为吞吐量受限,性能提升2-4倍。利用volatile强制编译器保留分支以打破数据依赖链,展示了底层硬件特性与编译器优化之间的博弈。
评论点赞收藏34 天前

排序秩编码:BWT压缩中MTF变换的高效替代方案

提出 Sorted Rank Coding (SRC) 算法作为 BWT 压缩中 Move-to-Front (MTF) 变换的替代方案。作者指出 SRC 在不使用上下文建模的情况下,能提供目前已知最佳的压缩率。对于研究数据压缩原理及优化压缩算法的技术人员具有参考价值。
评论点赞收藏34 天前

使用 phminposuw 实现最优解析

针对数据压缩中动态切换编码格式的问题,指出简单分块贪婪算法因元数据膨胀导致次优。介绍使用 phminposuw 库进行全局最优解析,平衡压缩率与格式开销。适合对底层压缩算法、动态规划及工程优化感兴趣的开发者。
评论点赞收藏36 天前

恢复被混淆的比特币地址(2024)

从零网归档实战出发,演示如何通过暴力破解与数学优化恢复大小写混淆的比特币地址。作者从Python慢速尝试起步,逐步演进至Rust实现,利用Base58编码特性与BigInt运算,将校验和验证次数降至最低,最终实现毫秒级恢复。
评论点赞收藏42 天前

后缀 BWT 与循环移位 BWT 的对比及快速计算方法

深入对比了 BWT 变换中两种变体:循环移位 BWT 与后缀 BWT。文章指出虽然后缀 BWT 解码稍慢,但借助 SA-IS 等算法编码速度极快,是大多数场景的首选。对于需要极小解码体积的场景(如 Demoscene),循环移位 BWT 仍有优势。文中还分享了利用字符串加倍或寻找最小循环移位来高效计算循环 BWT 的工程技巧。
评论点赞收藏43 天前

技术博客能带来快乐吗?

作者分享写技术博客的动机:为了在冷门领域探索并整理思路,而非追求流量。文中提到喜欢深入且独特的技术写作,并反思了小众技术内容的价值。
评论点赞收藏43 天前

后缀 BWT 与循环移位 BWT 之争,以及快速计算方法

Burrows-Wheeler Transform 存在两种变体:后缀 BWT 与循环移位 BWT,它们在性能特征和实现简洁性上存在细微差异,但这一区别在主流资料中鲜有记载。文章详细梳理了这两种变体的定义、转换逻辑及计算效率,特别是针对快速计算方法的对比分析。对于从事数据压缩、基因组对齐或底层算法优化的工程师而言,厘清这两者的边界有助于选择更适合场景的实现方案,避免在工程实践中因概念混淆导致的性能陷阱。
评论点赞收藏44 天前

优化 Lua 字符串字面量以节省 400 字节

分享在 ComputerCraft 项目中压缩 Lua 代码的具体技巧,通过优化字符串字面量节省 400 字节。包含针对特定嵌入式环境的工程实践和代码压缩手段,适合关注底层优化和 Lua 开发的读者。
评论点赞收藏45 天前

You might misunderstand arithmetic coding

This post assumes basic familiarity with arithmetic coding. I’ve written an arithmetic coder, like, three times in my life, so the mistake I want to highlight is likely amateurish. But since I didn’t...
评论点赞收藏103 天前

WASM interpreter fits in a QR code

2945 bytes. Less than 0.006% of Wasmtime, smaller than a C “Hello, world!”. Zero dependencies, no cheating: just a static x86-64 Linux executable. Scan the QR code above with zbarimg --raw -Sbinary or...
评论点赞收藏104 天前

This Wasm interpreter fits in a QR code

2945 bytes. Less than 0.006% of Wasmtime, smaller than a C “Hello, world!”. Zero dependencies, no cheating: just a static x86-64 Linux executable. Scan the QR code above with zbarimg --raw -Sbinary o...
评论点赞收藏105 天前

WASM is not quite a stack machine

Everyone knows Wasm is a stack machine. Wikipedia says so, the official Wasm design specification says so, you get it. I thought so too. That is, until I started writing Wasm code – not compiling for...
评论点赞收藏110 天前

Wait, if (flags and O_SYNC) is wrong?

I needed to convert file status flags between operating systems yesterday. They are the values you pass as the second argument to open – O_NONBLOCK, O_NOATIME, O_SYNC, O_DSYNC, and so on: int open(con...
评论点赞收藏113 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。