趣味Demo:不用main函数,输出"Hello World!"

今天同学给我出了一道题,基于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:

这个问题我有查了一下,发现有更为简单一点的解法,代码

#include <stdio.h>   
__attribute__((constructor)) void before_main()  
{  
    printf("%s/n",__FUNCTION__);  
}   
__attribute__((destructor)) void after_main()  
{  
    printf("%s/n",__FUNCTION__);  
}   
int main( int argc, char ** argv )  
{  
    printf("%s/n",__FUNCTION__);  
    return 0;  
}  
--------------------- 
版权声明:本文为CSDN博主「小帅哥gaoyi」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

这位大佬的解法我更可以接受,推荐给大家:原文链接:https://blog.csdn.net/gaoyi221119/article/details/77899294

同时还有一篇关于 mian函数 的相关讲解的文章:https://blog.csdn.net/lzm18064126848/article/details/51039607


版权声明:本文为Water_st原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。