## Swift 与 C 互操作性:更安全、更快速的体验 Swift 提供与现有 C 库的无缝互操作性,无需重写。虽然直接使用方式模仿 C 的风格——全局函数、不安全指针、手动引用计数——但它可能感觉不符合 Swift 的习惯,并引入安全问题。幸运的是,Swift 提供了注解,可以在不修改底层 C 代码的情况下创建更符合人体工程学和更安全的接口。 这些注解通过模块映射和 API 说明文件应用于 C 头文件,允许 Swift 以 Swift 友好的方式解释 C 约定。这使得诸如参数标签、方法、枚举和自动引用计数等特性成为可能。例如,C 的引用计数对象可以使用 `SWIFT_SHARED_REFERENCE` 转换为具有自动内存管理的 Swift 类。 诸如 `swift-synthesize-interface` 之类的工具可以帮助可视化生成的 Swift API。虽然手动注解可能很繁琐,但脚本可以通过解析头文件并生成必要的 API 说明来自动化该过程。C 头文件结构本身的改进(例如属性的放置)可以进一步简化此过程。 最终,这些技术使开发人员能够在 Swift 项目中利用庞大的 C 库生态系统,同时享受性能和安全性。
这篇文章不是关于*腌制*鱼类,而是**保全·菲什**——一位1766年出生于纽约的人,拥有一个非常不寻常的名字。作为政治显赫的菲什家族成员,保全最初通过捕鲸和航运积累财富,后来又参与了早期的纽约证券交易所和银行业务。
尽管他的名字引起了许多人的有趣反应(甚至激发了船只之间的玩笑交流!),保全·菲什仍然是19世纪纽约的重要人物。他甚至短暂地控制了强大的民主党政治机器“塔曼尼厅”,并成功地抵御了被称为“火车头派”的改革者团体。
“火车头派”在与菲什的斗争中获得了这个名字,他们对黑暗的会场用自燃火柴做出回应——这个名字源于对“火车头”一词的误解。作为那个时代典型的成功商人,保全·菲什的故事突出了塑造早期纽约历史的那些色彩鲜明的人物。
## 世界最大的齿轮船在丹麦水域被发现
海洋考古学家在丹麦和瑞典之间的厄勒海峡发现了一艘已知世界上最大的齿轮船——一种中世纪货运船。这艘名为“斯瓦尔盖特2号”的船只建造于大约1410年,长28米,载货量约300吨。这一发现为了解中世纪晚期的贸易和造船业提供了前所未有的见解。
这艘保存异常完好的沉船揭示了罕见细节,包括幸存的索具和砖砌的厨房——在丹麦水域发现的最早的此类厨房,表明船员拥有更高水平的舒适度和组织性。木材分析表明,这艘船只在荷兰建造,使用的材料来自波美拉尼亚和荷兰,突显了复杂的供应链。
重要的是,“斯瓦尔盖特2号”提供了“城堡”——船首和船尾的升起平台——的第一个实物证据,此前这些平台仅在艺术作品中出现。该船只的尺寸表明,存在一个高度组织化的贸易体系,能够支持盐、木材和食物等大宗商品的运输。“斯瓦尔盖特2号”目前正在进行保护,并有望重塑我们对中世纪航运及其在北欧贸易中的作用的理解。
## 解锁固件秘密,无需调试访问
本文详细描述了一次成功从锁定状态的嵌入式设备——廉价的网管型交换机——中提取密码的尝试,即使没有传统的调试访问权限。作者利用设备外部SPI闪存的指令跟踪来理解固件的代码流程。
目标设备是一款基于瑞昱RTL8372N芯片的GoodTop GT-ST024M交换机,最初通过UART阻止了访问。由于无法直接调试,作者专注于存储在W25Q16JV QSPI闪存芯片上的固件,利用其XIP(就地执行)功能。通过使用SLogic16U3逻辑分析仪捕获SPI通信,他们创建了加载执行的指令跟踪。
8051架构的代码分段系统使得逆向工程变得复杂,而标准Ghidra工具对此不支持。开发了一个自定义加载脚本来处理这个问题,并分析指令跟踪以确定密码输入期间执行的代码段。这揭示了关键位置,最终在固件中发现了XOR加密的密码。然后,注入了一个小的代码片段,通过UART转储了解密的密码。
该项目突出了在无法调试时硬件级分析的力量,并展示了SLogic16U3作为一种可行且经济实惠的替代方案,可以替代更昂贵的逻辑分析仪,如Saleae Logic。它强调了动态观察和创造性问题解决能力可以克服嵌入式安全研究中的障碍。