标签:
秦鼎涛 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、视频学习
二、使用gdb跟踪分析一个execve系统调用内核处理函数sys_execve
增加execve系统调用指令:
启动内核后,找到增加的exec命令:
list后,可以看出静态链接时elf_interp为空
再执行,跟踪到start_thread
新的可执行程序是从new_ip开始执行,start_thread实际上是把返回到用户态的位置从Int 0x80的下一条指令,
变成了规定的新加载的可执行文件的入口位置,即修改内核堆栈的EIP的值作为新程序的起点。当执行到execve系统调
用时,陷入内核态,用execve加载的可执行文件覆盖当前进程的可执行程序,当execve系统调用返回时,返回新的可
执行程序的执行起点(main函数位置),所以execve系统调用返回后新的可执行程序能顺利执行。对于静态链接的可
执行程序和动态链接的可执行程序execve系统调用返回时,如果是静态链接,elf_entry指向可执行文件规定的头部
(main函数对应的位置0x8048***);如果需要依赖动态链接库,elf_entry指向动态链接器的起点。
标签:
原文地址:http://www.cnblogs.com/qindingtao/p/5371660.html