Is it possible implementing a C program which does not perform any system calls?
老师让我写一个不执行任何系统调用的C函数。这项功能什么也做不了。
以下函数是否执行任何系统调用?
1 2 3 | int func() { return 0; } |
如果有,你能给我一个像我要找的那样的例子吗?
谢谢。
即使代码本身不包含系统调用(什么可以满足要求),也有一些隐含的系统调用来实际初始化、运行、停止和清理进程,即使它们不是二进制文件的一部分。执行哪些系统调用取决于平台。此外,至少会根据关闭进程的方式来设置退出状态:在main()中返回语句vs exit()。
我想,你的老师会对这段代码感到满意的,它不使用标准库,因为标准库本身包含许多不同目的的系统调用(就像大多数其他库一样)。您将无法读取/写入标准输入/输出和文件/套接字等。因此,您不能执行IO、进程创建和多线程、同步等操作,因为所有这些操作都需要系统调用(比如用户线程和spinlocks可能是一个显著的例外)。没有系统调用就不能编写有用的userland程序,除非程序接受了一些参数,结果返回为
不,您的示例函数不进行任何系统调用。您只需编译和反汇编即可确保:
1 2 3 4 5 6 7 8 9 10 11 | $ cc -O3 -c example.c $ objdump -d example.o example.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <func>: 0: 31 c0 xor %eax,%eax 2: c3 retq |
或者不进行优化,如果这很重要:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ cc -c example.c $ objdump -d example.o example.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <func>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: b8 00 00 00 00 mov $0x0,%eax 9: 5d pop %rbp a: c3 retq |
是的,上面有系统调用。每次有系统调用时,都可以使用ptrace()来停止,您将看到有系统调用。如果没有操作系统,如何从内存加载和卸载程序?