所有文章

"Stay Hungry. Stay Foolish." It was the farewell message.

Steven Paul “Steve” Jobs (1955 - 2011) passed away peacefully today. There aren’t enough words to express all he contributed to this world.

Today, a shocking news have shaken the industry. Steve Jobs, a pioneer of our industry, after several years of struggling with cancer, passed away at 56. This marks a loss not only to Apple computer, but the whole industry, even Apple’s business rivals.

I want to quote his 2005 Commencement at Stanford:

阅读全文… ( 本文约 564 字,阅读大致需要 3 分钟 )

W^X (可写与可执行互斥)

Von Neumann体系结构的计算机系统的一项特点是使用内存来保存程序和数据。这种设计减少了制造计算机的成本,但是也带来了一个弱点:因为事实上程序也是一种数据,如果这些"数据"在运行时可写,程序便有可能修改其本身,而如果这一特性被误用,例如由于程序本身的设计缺陷,攻击者便可以利用它来执行攻击者希望的任何事情。

阅读全文… ( 本文约 685 字,阅读大致需要 2 分钟 )

netmap

今天 BAFUG 活动, Luigi Rizzo (十年前提出DEVICE_POLLING概念的那哥们) 带来了他在 FreeBSD 上新实作的 netmap

简单来说 netmap 实际上是提供了一种让用户程序以一致的接口直接访问网卡(收发包且zero copy)的方法。Luigi Rizzo 的测试中,用以 1050MHz 的单核,在很普通的万兆网卡上就可以轻松达到 14.8 Mpps 了,每个包的开销大约是90个时钟周期。

阅读全文… ( 本文约 618 字,阅读大致需要 2 分钟 )

SMB协议 vs TCP的延迟ACK特性

之前一直没什么概念,今天看了微软的 KB 321169 的解释,大致如此:

  • 客户端 (SMB Redirector) 如果启用了 security signature,则必须等待命令处理完成才会发出下一条SMB;
  • 服务器端如果启用了延迟ACK,则可能需要过200ms (Windows 2000)才会给出ACK回应

不过感觉这个解释依然不是很有说服力—-文档上说,SMB服务器端是需要对 NT_TRANSACT_NOTIFY_CHANGE 给出回应的,那么这种情况下ACK不就回应回来了吗?或者说,只要收到了 ACK 就说明服务器端已经处理了这条 SMB?哪位帮忙理解一下?

参与评论

Ruby用实际行动向GPLv3吐槽,Ruby 1.9.3将改用 BSD 许可证发布

Ruby 从下一个版本,也就是 1.9.3 开始,从原先的 GPLv2 许可证换成了 2-clause BSD 许可证(大体上相当于 MIT 许可证)。

早期 Ruby 采用的是自由软件基金会推荐的 GPLv2 or later 许可证方式。在实际操作中这种许可方式十分常见,这种许可证方式包含两层意思:

阅读全文… ( 本文约 1010 字,阅读大致需要 3 分钟 )

备忘:OpenSSL valgrind报"Conditional jump or move depends on uninitialised value(s)"的解决

最近改一个用到 OpenSSL 的程序,顺手用 valgrind 抓了一下,发现很多「Conditional jump or move depends on uninitialised value(s)」的错误。发现 OpenSSL 的 FAQ 提到,在生成随机数时会将输入缓冲区(未初始化)的内容直接混入 entropy pool,使用 valgrind 时便会导致警告。

阅读全文… ( 本文约 396 字,阅读大致需要 1 分钟 )