• entries
72
51
• views
60015

# C++ in Kernel Land

131 views

Ugh...

I just fixed a tricky bug in the Kernel. The hardest thing is not setting up the complier, but rather, the language, itself.

There are alot of C++ constructs that require the runtime to work with. Not defining these constructs will lead to errors and triple faults. A few examples are as follows:

• Exception handling requires runtime support to handle uncaught exceptions;
• C++ new and delete operators rely on an existing memory manager;
• All global ctors and dtors must be initialized by the runtime library;
• Initil stack frame that which calls main();
• RTTI requires runtime support, this includes keywords such as typeid;

There are more then this. Because we cannot use the runtime, WE have to do all of this ourselves.

The bug that I just fixed was none of the above. It was when I found out that global and static variables failed to initialize. That is, this would work:
void foo () {   int i=0;  // i==0}

This did NOT work:
void foo () {   static int i=0;  // i==???}

The solution was that, in C++, global and static variables--That are initialized, but never modified, gets placed inside another section within the PE executable--.edata.

This section, however DID exist. The primary problem is that of Memory misalignment, where the code would reference a memory location based off of the wrong base address.

After setting the initil base address, everything worked just fine.

Notice that, in the high level (C++ level), this has NOTHING to do with static and global variables.

This is an example of me stating that While we are working with C++, we are still working in a low level envirement!

---------------

Next tutorial started

The next tutorial has started. It will cover:

• Setting the build envirement (Setting up MSVC++ 2005) for Kernel land
• A simple (But basic) way of loading and executing the Kernel's program main entry point from Stage 2. I will go over the PE file format, but not in alot of detail here--We will do that inside of the Task Manager.
• Setting up C++ to work (At a basic level, as there are some things that C++ requires that we simply cannot handle yet--such as new/delete)

Guess thats all for now...[looksaround]

There are no comments to display.