Secure Modules: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 15: | Line 15: | ||
* syscall 1: Unload | * syscall 1: Unload | ||
* while(1) sleep() | * while(1) sleep() | ||
== call_ctors/call_dtors == | |||
These just call function pointers, basically libc_init_array. | |||
== sm_main == | |||
It has a memory pool allocated on stack. It's filled with structures for command handlers. Then, it calls main_loop. | |||
== main_loop == | |||
This uses syscall 4 (RegisterIrqHandler) to register a common handler for incoming commands. Then it loops while sm is "active". Then it sets handler for commands = null pointer. |
Revision as of 03:01, 7 March 2018
sm common code
sm modules are loaded to 0x80B000, then code from that addr is executed.
There is a lot of common code shared between sm: entry, cmd handler, cmd setup, etc
Entry
This is the first code executed in sm. It's located at 0x80B000. It does the following:
- Get random value (stack cookie?)
- call_ctors()
- sm_main()
- call_dtors()
- syscall 1: Unload
- while(1) sleep()
call_ctors/call_dtors
These just call function pointers, basically libc_init_array.
sm_main
It has a memory pool allocated on stack. It's filled with structures for command handlers. Then, it calls main_loop.
main_loop
This uses syscall 4 (RegisterIrqHandler) to register a common handler for incoming commands. Then it loops while sm is "active". Then it sets handler for commands = null pointer.