Dynamic loading basically allows a process to run at a new address space by using relocation symbols. These relocation symbols allow the loader to figure out how to change addresses and references so that the processes can be loaded into different address spaces. For example, a dynamic loader might've loaded threados-app like this: