装载与汇编
- 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>
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Mandarava23!
评论


