27 May 2026 · 941 words · 5 mins
torrent-web-seeder 是 Webtor 体系里的一个 BitTorrent 到 HTTP 的网关服务。它的目标不是做一个普通 BT 下载器,而是把 torrent 中的文件变成 HTTP 可访问资源:客户端请求某个 info-hash/path,server 端按需加入 BitTorrent 网络下载对应 piece,并把数据通过 HTTP 流式返回出去。
这篇记录一次代码阅读结果,重点放在 server 端:它怎么启动、请求怎么走、torrent 怎么被加载和回收、mmap 存储层为什么复杂,以及实际运行时应该带哪些参数。
23 May 2026 · 649 words · 4 mins
这篇只是记一下最近用 Go 包 libarchive 的思路。
目标很普通:把一个目录打成 tar.zst,解包时也尽量保留原来的文件系统语义。真正费时间的地方不在遍历目录,而是各种边角:非 ASCII 文件名、软链接、硬链接、稀疏文件、设备节点、权限、owner、xattr,还有一些错误只会在 close 阶段冒出来。
如果只用 Go 标准库 archive/tar 手写,普通文件当然很快能跑通,但后面大概率会变成不断补特例。所以我最后还是把 libarchive 当成底层实现,行为尽量贴近 bsdtar。
23 May 2026 · 485 words · 3 mins
I hit this while installing a local pwntools checkout:
error: externally-managed-environment This is not a pwntools problem. It is Python packaging doing what the distro asked it to do. On recent Debian and Ubuntu systems, the system Python is marked as externally managed, so pip install into the global interpreter is blocked by default.
23 May 2026 · 481 words · 3 mins
This is the way I install pwndbg from a local checkout when I want the Python dependencies isolated in a venv.
I am not using setup.sh here. The script is convenient, but it also tries to install system packages with sudo. For a clean user-level install, I prefer doing the Python part explicitly.
20 May 2026 · 1275 words · 6 mins
NSE 是 Nmap 的 Lua 脚本引擎,适合把一次协议探测挂到 Nmap 的扫描结果上。这篇直接进入实操:编写一个 HTTP(S) 资产指纹脚本,用于 Web 资产发现,提取状态码、Server、Location、Content-Type、title、body 长度、body hash 和 preview。
20 May 2026 · 715 words · 4 mins
NSE 是 Nmap Scripting Engine,是 Nmap 内置的 Lua 脚本扩展系统,用来在端口扫描和服务识别之后继续做协议探测、资产发现、漏洞验证和结构化信息采集。它常见于 HTTP 指纹识别、TLS 证书分析、数据库未授权探测、默认账号检查和轻量级漏洞检测等场景。
16 May 2026 · 925 words · 5 mins
虚拟机的关机流程很容易被写成一团:收到用户中断,发一个信号,关几个服务,杀掉虚拟机,然后退出。
这看起来能工作,但一旦运行时变复杂,就会暴露出许多问题:日志丢失、磁盘没来得及 sync、guest-agent 没跑完整、宿主侧代理提前退出、第二次 Ctrl-C 也不能立刻结束。
这次 revm 的关机流程重构,本质上不是修一个 Go 代码问题,而是重新思考一个虚拟机运行时应该如何表达“关机”。
4 May 2026 · 566 words · 3 mins
最近把这个博客从 Jekyll 迁移到了 Hugo,并使用 Blowfish 作为主题。整个过程并不复杂,但有不少细节容易混在一起:Hugo 的资源目录、Blowfish 的配置入口、GitHub Pages 的部署方式、文章迁移后的图片路径、首页摘要、favicon、SEO,以及哪些内容应该交给主题配置,哪些内容应该用站点级覆盖。
这篇记录把这次迁移和配置经验整理下来,方便以后复盘。
21 November 2023 · 3905 words · 19 mins
围绕 GLIBC ptmalloc,记录 tcache、smallbins、malloc 路径和堆结构的调试分析。
5 November 2023 · 377 words · 2 mins
记录 RTL8821 Linux 无线网卡驱动的识别、编译、安装和调试过程。
21 October 2023 · 885 words · 5 mins
记录 UFI001C/MSM8916 平台刷写 OpenWrt、配置网络、SSH、ZRAM 与救援流程。
21 October 2023 · 553 words · 3 mins
记录 MSM8916/UFI 设备上的 lk2nd、OpenWrt 启动、分区和调试过程。
20 October 2023 · 1903 words · 9 mins
glibc 不支持 Clang 编译,或者说暂时不支持。因为 glibc 本身使用了大量GCC独占的特性。但开源社区也有尝试用 Clang 构建 glibc。
24 July 2023 · 333 words · 2 mins
记录 Rockchip 平台安全启动链路的理解,包括 bootROM、密钥、镜像验证和启动阶段。
20 July 2023 · 655 words · 4 mins
全部都是个人理解,非常个人的理解;如果你想看严谨文档,建议直接去读 ARM 和 TF-A 官方资料。
17 July 2023 · 274 words · 2 mins
整理 Linux CPU 调频策略和调度相关配置,记录不同 governor 的行为差异。
7 July 2023 · 540 words · 3 mins
GDB 在BinaryHacking 的 _start 处下断点,发现执行的汇编代码咋和想象中的不太一样?
7 July 2023 · 428 words · 3 mins
Linux 生态是开源的,所以调试所需的源码和 debug symbol 可以很方便地获取到。方便到什么程度?如果使用 Ubuntu Jammy 以上版本,那么:
4 July 2023 · 162 words · 1 min
编写 CMakeLists.txt 的套路基本就是这样,先填写 project 信息,然后引用宏,定义自己的 option,写判断语句,然后 add_executable,target_sources。
4 July 2023 · 397 words · 2 mins
整理 2023 HVV 面试和安全基础问题笔记,包括 WebSocket、协议升级和常见攻防知识点。
24 June 2023 · 133 words · 1 min
zerotier-one 在启动的时候会建立 /var/lib/zerotier-one 作为自己的工作目录,里面存放了zerotier 运行时所需要的配置文件。
21 June 2023 · 390 words · 2 mins
Vim 不知不觉已经迭代到 9.0 版本了,回想起来我昨天好像还在用 Vim 6.0。
15 June 2023 · 238 words · 2 mins
WL_ROCKCHIP 下的 Realtek 模组和 AP6xxx 模组不能同时选择为 y,AP6xxx 和 Cypress 也是互斥的。至于 out-of-tree 模块则没有这个限制,可以在 Buildroot 中直接修改 Makefile。
2 June 2023 · 107 words · 1 min
OpenStick 为 410 Wi-Fi 板适配的 Linux 内核可以在 UFI003_MB_V02 主板上启动,但 modem 工作不正常。插入 SIM 卡后,使用 mmcli -m 0 查看 modem 状态时,会发现 sim-missing 异常:
30 May 2023 · 502 words · 3 mins
向世界诉说自己的废话与美梦,让大家更懂你,更加排斥你
3 May 2023 · 502 words · 3 mins
U-Boot 提供一个交互式的 Shell 可以操作内存与外设。
3 May 2023 · 503 words · 3 mins
整理 GDB、GCC、Binutils 相关调试笔记,包括 CMake 参数、链接选项和符号调试环境。
3 February 2023 · 1196 words · 6 mins
拿到光猫的最终控制台后,接下来怎么办?是不是可以放一点私货进去? 首先,光猫的 cpu 架构是mips32架构,这一点可以从 cat /proc/cpuinfo 这条命令验证。
3 February 2023 · 574 words · 3 mins
继续记录 Distcc 集群的性能优化思路,包括节点配置、构建参数和实际瓶颈分析。
30 January 2023 · 171 words · 1 min
记录不同 ARM 节点组成的 Distcc 集群在构建 Node.js 等大型项目时的测试结果。
30 January 2023 · 1464 words · 7 mins
重新编译内核真的是非常耗时。修改内核树内的驱动不用重新构建整个内核,但每修改调度、文件系统这类底层代码,都需要重新构建一次 zImage 镜像,然后分发到测试机器上。构建 kernel 巨浪费时间,不知道内核开发者怎么受得了这种苦。
28 January 2023 · 156 words · 1 min
minicom 串口乱码,但也不是全乱码,随缘乱码,每次按回车的时候输出这玩意儿:
28 January 2023 · 73 words · 1 min
CONFIG_SCHED_SMT 到底要不要打开?
27 January 2023 · 91 words · 1 min
真是烦死了,每次看 Maven 的 Java 项目都要经历 jar 包下载失败;手动执行 mvn dependency:sources,又依赖下载失败,浪费巨多时间。
27 January 2023 · 270 words · 2 mins
Linux 显示软件栈贼复杂,是我见过最复杂的系统,然后我本来就挺笨的。关于 Linux 显示软件与技术栈,说错我不负责,你看看就好。
27 January 2023 · 222 words · 2 mins
你可以在我的 GitHub 上下载到这些二进制 ELF 工具,如 curl,wget,ftp,busybox 等。这些工具主要用于分析嵌入式设备的固件,搭建测试环境,还可以整点有趣的活,比如在运营商的光猫上跑点自己的代码,比如 PHP 和 Perl。
26 January 2023 · 503 words · 3 mins
BetterProfiler 是一个针对嵌入式 Linux 的进程动态跟踪器。BetterProfiler 可追踪进程与内核的整个生命周期,文件 IO,网络IO,内存操作,加密读写等。
5 January 2023 · 391 words · 2 mins
functions echo 的 scanf 没有对输入的buffer 大小做限制而用户可以输入超长字符串覆盖函数的 return 地址,进而跳转执行 secretFunction 函数。
10 September 2022 · 11 words · 1 min
我抗拒,我不要,我不,不,NO 上大学的时候,从宿舍到科技园偶尔能碰见几个人和我友善的打招呼。他们大老远就喊:学长!学…..长!! 我的内心:”我超,他认识我,下次请不要喊我了,求你了,真的求求了,MTF”
5 September 2022 · 176 words · 1 min
你可能不知道的是 IntelliJ IDEA 社区版是开源的,其源代码托管在 https://git.jetbrains.org 中。