2011-07-14 51 views
2
[[email protected] gwan]# file gwan 
gwan: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped 
[[email protected] gwan]# ldd gwan 
    not a dynamic executable 

[[email protected] gwan]# du -csh gwan 
208K gwan 
208K total 

gwan是怎么做到的?不需要任何库的可执行文件,甚至libc?

作为一个Web服务器,它需要做套接字编程和许多其他繁重的工作,所有这些工作都需要与libc链接,但gwan似乎不是这样。这怎么可能?

回答

2

正如它在file输出中所述,它是静态链接的 - 即它具有从库中拉出并包含在可执行文件中的所有相关代码。它是“硬编码”的。

+0

你注意到它的尺寸有多小? –

+1

@Je Rog:静态链接不是关于嵌入整个库,而只是使用的函数。 –

+0

208K看起来很丰富,坦白地说,如果你遗漏了这个垃圾。托管第一个UNIX系统的PDP-7的最大RAM容量为144K。 –

5

像往常一样,它没有魔法,GWAN与UPX包装看起来更小,节省200kB左右。打开它,结果如下。

> ldd gwan 
linux-gate.so.1 => (0xf770c000) 
libpthread.so.0 => /usr/lib32/libpthread.so.0 (0xf76e9000) 
librt.so.1 => /usr/lib32/librt.so.1 (0xf76e0000) 
libdl.so.2 => /usr/lib32/libdl.so.2 (0xf76db000) 
libm.so.6 => /usr/lib32/libm.so.6 (0xf76b1000) 
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7695000) 
libc.so.6 => /usr/lib32/libc.so.6 (0xf752c000) 
/lib/ld-linux.so.2 (0xf770d000) 
+0

你是如何解开它的? –

+0

http://upx.sourceforge.net/ – Lonewolfer

+0

是真的,我意识到当我看到它看起来像随机噪声..) – mykhal

1

鉴于其他应用服务器的足迹 - 大多只支持一个脚本语言 - 肯定有一些 “神奇” 在看到G-WAN(150KB),支持C,C++,Objective-C的,d和Java。

G-WAN和Linux 64位OpenJDK/SUN_JVM在之后只加载了20MB的RAM,加载了所有应用程序示例。

由于内存占用量在启动时记录在gwan.log文件中,它们显然会密切关注内存使用情况。

2

Nginx的

  • 0本地脚本语言来生成动态内容
  • 没有扩展本地API
  • 2.7 MB足迹

G-WAN

  • 5本地脚本语言来生成动态内容
  • 富本地API(JSON,GIF I/O,KV存储,2D帧缓冲器原语,图表,电子邮件,压缩,加密等)
  • < 1 MB足迹

其中'魔术'居住似乎是一个味道问题,而不是一个理由问题。

相关问题