[英]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.