How the call and ret for any dll or exe file works
This actually does depend on whether it's a DLL or an EXE in question.
When Windows' module loader finishes loading a DLL, it calls the start address (known as 'DllMain') of the DLL with the DLL_PROCESS_ATTACH
parameter ( see the documentation of DllMain ). If DllMain returns 1, the loader continues on.
However when you launch an EXE, the system spawns a new process and maps ntdll.dll into that process' address space, then spawns the main thread running from NTDLL's start address. That thread then performs more initialisation, loads the EXE file (plus any DLLs listed in its import table) and calls the function identified by the EXE's start address. When that function returns, NTDLL then calls NtTerminateProcess
which kills all running threads and closes the process.
This EXE launching process may be difficult to observe with a user-mode debugger; some debuggers struggle to break in those early stages of process initialisation.