标题有点错误,但这是我目前所能用的最好的英语。
我的意思是:
我目前正在创建我的";玩具;OS。
我可以在C:中创建这样的字符串
int main() {
char* s = "blah";
}
这意味着我正在创建一个指向内存块的指针,对吧?
我认为,如果没有操作系统,我将不得不做以下事情:
int main() {
char* s = 0x/*A random address here*/;
s[0] = 'b';
s[1] = 'l';
s[2] = 'a';
s[3] = 'h';
s[4] = 0;
我还没有真正尝试过第二种方法,但我觉得这两种方法都是未定义的行为,因为我还没有在某个地方注册字符串的长度。
有人能帮我吗?
- 由于我没有指定地址,RAM中存储的第一个
"blah"
在哪里 - 第二种方式是正确的吗?如果不是,正确的方式是什么
- 我提到的方法中有没有未定义的行为
提前感谢。
通常,编译器会生成一个输出文件,其中包含它生成的代码和数据,以及关于如何在内存中布局的信息。链接器读取其中一个或多个文件并生成类似的输出文件。当程序执行时,程序加载程序读取链接器生成的可执行文件,并将代码和数据放入内存中的适当位置。
一些链接器还可以选择生成一个"原始"二进制文件,如果准备得当,该文件可以直接加载到内存中。
要制作操作系统,您必须有某种加载操作系统的方法。这可能是硬件加载到内存中的原始二进制文件,也可能是固件知道如何加载的某种文件格式。现代通用计算机包含执行广泛操作以支持加载操作系统的硬件和固件。要为这样的计算机创建操作系统,您需要了解其固件使用的文件格式。