<span style="font-family: Arial, 'Hiragino Sans GB', SimSun, 宋体, serif; background-color: rgb(238, 238, 238);"> 张磊+原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 </span>
使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve ,验证您对Linux系统加载可执行程序所需处理过程的理解
登陆实验楼虚拟机
cd LinuxKernel
rm -rf menu
git clone https://github.com/mengning/menu.git
cd menu
mv test_exec.c test.c
make rootfs
增加-s -S启动参数打开调试模式
qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img -s -S
启用 gbd 调试模式:
gdb
file ../linux-3.18.6/vmlinux
target remote:1234
设置断点:
b sys_execve
b do_execve
b do_execve_common
b exec_binprm
b load_elf_binary
b start_thread
调试:
小结:
装载和启动一个可执行程序依次调用以下函数:sys_execve() -> do_execve() -> do_execve_common() -> exec_binprm() -> search_binary_handler() -> load_elf_binary() -> start_thread()