我不是想做任何这样的事情,但我想知道是否可以在C中实现"整个操作系统"(不一定像Linux或Microsoft Windows那样大,但更像是一个类似DOS的操作系统)和/或C++使用no或little程序集.
通过实现操作系统,我的意思是从头开始使用C或C++将启动加载程序和内核启动到图形驱动程序(以及可选的GUI).通过编译器访问低级功能,我在C++中看到了一些低级的东西.这可以在整个操作系统上完成吗?
我不是在问这是不是一个好主意,我只是想问它是否可以远程实现?
我想在不使用任何POSIX库的情况下在C中实现多线程.任何帮助,将不胜感激.
不:不要使用fork()或vfork().
fork系统调用代码是如何编写的.我想知道一些函数如何返回两个不同的值以及两个不同的进程的细节.总之想知道fork系统调用是如何实现的?
因此,您即将把工作计算机传递给您的同事.您如何确保真正删除所有个人数据?
重新格式化,重新安装操作系统不会真正解决问题.
这让我想到这些程序是如何工作的?我的意思是,他们使用什么算法以及这些实现的低级别?
有任何想法吗?
最近的Linux内核(至少在amd64上)提供了一个魔术对象文件linux-vdso.so.1,该文件将syscall接口抽象到内核,允许内核选择最佳的调用约定.如果用C编写代码,glibc会自动使用该对象.
现在,如果我想在不使用glibc的情况下编写程序,我该如何使用这个对象?它提供的界面是否记录在某处?召唤大会怎么样?
我想进入Linux的系统编程,并想知道如何处理它以及从哪里开始.我来自Web开发背景(Python,PHP),但我也知道一些C和C++.
基本上,我想知道:
PS:只是为了澄清,系统编程我的意思是编写设备驱动程序,系统工具,编写本机应用程序,这些应用程序在Linux平台上不存在但在其他程序上,与Linux内核一起使用等.
在我的C#应用程序中,如何阅读有关设备的特定信息?我尝试过WMI,它不提供我需要的信息.
我想要的信息存储在设备的详细信息选项卡中,我想要的信息是"父".
我也看了注册,没有任何运气.
我在这里看了一篇文章,并且正在尝试我在下面复制的代码片段: -
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <linux/user.h> /* For constants
ORIG_EAX etc */
int main()
{ pid_t child;
long orig_eax;
child = fork();
if(child == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("/bin/ls", "ls", NULL);
}
else {
wait(NULL);
orig_eax = ptrace(PTRACE_PEEKUSER,
child, 4 * ORIG_EAX,
NULL);
printf("The child made a "
"system call %ld\n", orig_eax);
ptrace(PTRACE_CONT, child, NULL, NULL);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我怀疑究竟ORIG_EAX是什么以及为什么4*ORIG_EAX传递给ptrace调用.我最初假设ORIG_EAX,EBX …
mkfifo函数有两个参数,路径和模式.但我不知道它使用的路径的格式是什么.我正在编写一个小程序来创建一个命名管道并作为路径mkfifo./home/username/Documents例如,使用消息,它总是返回-1 Error creating the named pipe.: File exists.
我已经检查了很多次这个目录,里面没有管道.所以我想知道问题是什么.我在mkfifo中使用的模式是0666或0777.
我用-g选项编译了我的freebsd libc源代码,现在我可以介入libc函数了.
但我无法进入系统调用代码.我用-g编译了freebsd内核源代码.在设置断点时,gdb会在.S文件上通知断点.在点击断点时,gdb无法进入系统调用源代码.
另外,我试过:gdb $ catch系统调用打开
但这也行不通.
你能建议一下吗?
谢谢.
c ×5
linux ×3
unix ×3
.net ×1
c# ×1
c++ ×1
device ×1
filesystems ×1
gdb ×1
hard-drive ×1
linux-kernel ×1
mkfifo ×1
ptrace ×1
system-calls ×1
windows ×1