繁体   English   中英

是否可以实现不执行任何系统调用的C程序?

[英]Is it possible implementing a C program which does not perform any system calls?

我的老师让我写一个不执行任何系统调用的C函数。 函数什么都不做就没有关系。

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

int func() {
  return 0;
}

如果确实如此,你能给我一个像我正在寻找的样本功能吗?

非常感谢。

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

我想,你的老师会对这段代码感到满意,它不会使用标准库,它本身包含许多用于不同目的的系统调用(就像大多数其他库一样)。 您将无法从/向stdin / out和文件/套接字等读取/写入。因此,您无法执行IO,进程创建和多线程,同步等,因为所有这些都需要系统调用(类似于用户线程和自旋锁可能是一个值得注意的例外)。 没有系统调用就无法编写有用的userland程序,除了采用一些args的程序,结果作为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()停止,并且您将看到有系统调用。 如果没有操作系统,程序如何从内存中加载和卸载?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM