今天同学给我出了一道题,基于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版权协议,转载请附上原文出处链接和本声明。