一个不需要任何库的可执行文件,甚至是libc?

时间:2011-07-14 12:37:02

标签: elf g-wan

[root@ gwan]# file gwan 
gwan: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
[root@ gwan]# ldd gwan 
    not a dynamic executable

[root@ gwan]# du -csh gwan 
208K    gwan
208K    total

gwan如何做到神奇?

作为一个Web服务器,它需要执行套接字编程和许多其他繁重的工作,这些工作都需要与libc链接,但gwan似乎并非如此。怎么可能?

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

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

答案 2 :(得分:2)

Nginx

  • 0本机脚本语言,用于生成动态内容
  • 没有扩展的原生API
  • 2.7 MB足迹

G-WAN

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

' magic '所在的地方似乎是品味而非理性问题。

答案 3 :(得分:1)

考虑到其他应用程序服务器的足迹 - 大多数只支持一种脚本语言 - 看到G-WAN(150kB)支持C,C ++,Objective-C,肯定有一些“魔力”, D和Java。

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

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

相关问题