The Marmalade SDK manages to work its magic of being able to take one codebase and deploy it to multiple platforms by providing a set of APIs that sit on top of the APIs specific to each platform.
A deployed application executable actually consists of two separate files. Our application code is compiled into an S3E file, which is the Marmalade equivalent of a Windows Dynamic Link Library (DLL). This file is the same across all platforms.
In order to execute our S3E file, a Loader program is used. This program is the glue between the platform we are running on and our own code. The loader program starts up first, loads the S3E file into memory, and then passes control to the code within it. If our code needs to make a platform-dependant call, it actually makes a request to a function in the loader that will then call the correct operating system function.
The loader program is a fixed entity and cannot be changed by us, so Marmalade provides us with the EDK system...