今天同学给我出了一道题,基于Linux,如何实现在不用main函数的情况,输出"Hello World!" ,我百思不得其解,本以为可以用echo命令回,或者cat文件,但是好像思路都不太对,后来他告诉我用汇编语言……简直崩溃,看完之后,感觉单片机的汇编语言和这个简直没法比呀……下面是代码实现;
// vi 创建 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");
}//asm (assembly language 的简称),即:汇编语言。asm是一个符号连接
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
//2019/8/10 Update:
这个问题我有查了一下,发现有更为简单一点的解法,代码