2011-07-14 62 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足跡

其中'魔術'居住似乎是一個味道問題,而不是一個理由問題。

相關問題