有没有可能实现一个不执行任何系统调用的C程序?



老师让我写一个不执行任何系统调用的C函数。函数不完成任何任务都没关系。

下面的函数是否执行任何系统调用?

int func() {
  return 0;
}

如果有,你能给我一个我正在寻找的示例函数吗?

即使代码本身不包含系统调用(什么可以满足要求),也有一些隐含的系统调用来实际初始化、运行、停止和清理进程,即使它们不是二进制文件的一部分。执行哪个系统调用取决于平台。此外,至少退出状态将根据您关闭进程的方式设置:main()

中的return语句与exit()

我猜,你的老师会对这段代码很满意,它没有使用标准库,标准库本身包含许多不同目的的系统调用(就像大多数其他库一样)。你将无法读写stdin/out和文件/套接字等。所以你不能做IO,进程创建;多线程、同步等,因为所有这些都需要系统调用(像用户线程和自旋锁这样的东西可能是一个值得注意的例外)。如果没有系统调用,就无法编写有用的用户域程序,除非程序接受一些参数,并以int返回结果(例如命令行工具)。你也可以实现"完全安静"的CPU加热的东西。

不,您的示例函数不进行任何系统调用。您可以编译并反汇编它以确保:

$ 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   

或者不进行优化,如果这很重要的话:

$ 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()在每次有系统调用时停止,您将看到有系统调用。如果没有操作系统,该如何从内存中加载和卸载程序呢?

相关内容

最新更新