楔子
继续Linux Kernel内核态加载elf main入口调看
类同
elf文件实际上就类似于windows上的exe文件。
注意
注意下elf的入口其实是_start函数,linux kernel在设置调用main函数入口的时候实际上是设置的rip(new_ip)为_start入口,此处为:0x4016b0。通过_start调用Glibc,后者调用了main。sp(new_sp)则为一个固定的八字节:0x0000000000000001.
有了这两条信息,可以去kernel里面调看下。
调看
在start_thread函数断点,进入
看下局部变量new_ip,new_sp的值分别是的多少
new_ip=0x4016b0刚好是elf入口_start函数地址。
new_sp=0x00007ffcb46c7560,看下它内存是啥
可以看到它确实是:0x0000000000000001。
那么这个很明显的就在于,当CPU从内核态切换到用户态的时候,直接跳转到用户态的RIP所在的地址,也就是elf函数_start地址,同时设置了RSP的值。
结尾
到这里elf大致上有个了解了,后面继续看下其它方面的。
作者:江湖评谈