最近在拜读《程序员的自我修养-链接,装载与库》一书,书中给出了一个没有main函数的HelloWorld程序。代码如下(PS:强烈推荐此书!)
TinyHelloWorld.c
char* str = "Hello World!\n";
void print()
{
asm("movl $13,%%edx \n\t"
"movl %0,%%ecx \n\t"
"movl $0,%%ebx\n\t"
"movl $4,%%eax \n\t"
"int $0x80 \n\t"
::"r"(str):"edx","ecx","ebx");
}
void exit()
{
asm("movl $42,%ebx \n\t"
"movl $1,%eax \n\t"
"int $0x80 \n\t"
);
}
void nomain()
{
print();
exit();
}
编译运行:
gcc -c -fno-builtin TinyHelloWorld.c
ld -static -e nomain -o TinyHelloWorld TinyHelloWorld.o
./TinyHelloWorld
详情参见《程序员的自我修养-链接,装载与库》4.6.2 page 124