• RIP - 存放下一条指令的偏移地址
  • RSP - 存放当前栈帧的栈顶偏移地址
  • RBP - 存放当前栈帧的栈底偏移地址

静态链接的程序的执行过程

$ ./binary -> fork() -> execve("./binary", \*argv[], \*envp[]) <user mode>

-> sys_execve() -> do_execve() -> search_binary_handler() -> load_elf_binary() <kernal mode>

-> _start -> main() <user mode>

[!note]
fork()将当前进程复制一份,然后execve()用新的可执行二进制文件代码替换新进程的代码,以此创建新进程

动态链接的程序的执行过程

$ ./binary -> fork() -> execve("./binary", \*argv[], \*envp[]) <user mode>

-> sys_execve() -> do_execve() -> search_binary_handler() -> load_elf_binary() <kernal mode>

-> ld.so -> _start -> __libc_start_main() -> _init -> main() <user mode>