2022-2023-1 20222820《Linux内核原理与分析》第八周作业

实验七 Linux 内核如何装载和启动一个可执行程序

目录

实验七 Linux 内核如何装载和启动一个可执行程序

一、实验内容

1.打开实验楼,打开终端输入以下命令er

2.在test文件中查看exec函数​编辑

3. 使用以下命令,qemu暂停,再打开一个新的终端进行gdb调试

 4.使用以下命令查看hello的ELF头部

 二、总结


一、实验内容

1.打开实验楼,打开终端输入以下命令er

cd ~/LinuxKernel
rm menu -rf
git clone https://github.com/mengning/menu.git
cd menu 
mv test_exec.c test.c
make rootfs

2.在test文件中查看exec函数

3. 使用以下命令,qemu暂停,再打开一个新的终端进行gdb调试

cd ../
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s

 对sys_execve,load_elf_binary,start_thread进行断点调试

 

 4.使用以下命令查看hello的ELF头部

redelf -h hello

 二、总结

当sys_execve()系统调用从内核态返回到用户态时,EIP寄存器直接跳转到ELF程序的入口地址。
execve和fork都是特殊一点的系统调用:一般的都是陷入到内核态再返回到用户态。fork父进程和一般进程调度一样,子进程返回到一个特定的点ret_from_fork,子进程是从ret_from_fork开始执行然后返回到用户态。execve特殊:执行到可执行程序–陷入内核–构造新的可执行文件–覆盖掉原可执行程序–返回到新的可执行程序,作为起点(也就是main函数) ,需要构造他的执行环境。
 

猜你喜欢

转载自blog.csdn.net/weixin_44226607/article/details/127721455