【发布时间】:2014-11-06 02:38:46
【问题描述】:
我正在编写一个单一的操作系统(称它为操作系统是一个笑话,但它确实有非常少的学校级功能主义者)。 当我说单体时,我的意思是,它被编译为单个二进制 blob,不支持文件系统等。目前我只有一个基本的简单用户空间,它只不过是无限的 while 循环。
我计划让我的操作系统更有用,并希望能够编写可以像成熟操作系统上的常规应用程序一样终止的用户应用程序。
我没有 glibc 或同等版本。我当前在用户空间中的库是我编写的代码。 现在我的问题是如何为用户空间应用程序添加一个框架,让它们在一个固定点终止。
我确实知道程序是如何在常规系统上编译的,以及程序终止时会发生什么。但是,在我的情况下,我没有奢侈地针对库编译程序,如果程序终止,那么我的指令指针只会绕道而行。
目前我正在制作所有应用程序来执行“返回调用”,并且我正在使用修复地址(在启动期间)预先填充应用程序堆栈。 有没有更好的方法来处理这个问题?
除了答案之外,我非常乐意了解一些操作系统概念。
我正在使用 x86 模拟器平台并静态编译我的二进制文件。 (我确实有虚拟内存支持)
【问题讨论】:
-
我很确定早期版本的 Linux 也是个笑话。不要这么快自我贬低:-)
-
您是在询问应用堆栈的特定问题,还是询问其他问题?
-
我在询问有关在固定地址中终止应用程序的解决方案。目前我已经采取了一条路线,其中每个应用程序都有一个固定的返回地址,我将其填充到堆栈中。现在,我正在寻找更好的解决方案。
标签: c operating-system kernel