你的位置:首页 > 软件开发 > 操作系统 > 动态链接过程

动态链接过程

发布时间:2016-06-21 17:00:04
最近学习了elf文件的格式,重点关注了动态链接过程中的使用到的section  第一步程序在加载时,会把解释器程序加入到.interp段。可以解决动态库和可执行文件的加载。  一般来讲程序的加载方式是懒启动,Lazy;除非指定了LD_BIND_NOW环境变量非0,那么在程序启动时 ...

  最近学习了elf文件的格式,重点关注了动态链接过程中的使用到的section

  第一步程序在加载时,会把解释器程序加入到.interp段。可以解决动态库和可执行文件的加载。

  一般来讲程序的加载方式是懒启动,Lazy;除非指定了LD_BIND_NOW环境变量非0,那么在程序启动时就会把外部符号地址全部加载完成。

  当遇到还未加载的符号时,比如printf,出在libc中。

  首先程序会到call plt段中的某个地址,这里只是一个跳转,如:

   调用malloc

  0x080484d8 <+24>:    e8 63 fe ff ff  call   0x8048340 <malloc@plt>

  此处是跳转到*0x804a004中的内容指定的地址,这个指针地址是处于.got.plt段的,如果是第一次调用,那么.got.plt表中保存的是0x8048346,就是plt段的下一句话,这时候会压入一个offset,这个8,这个8是这个符号在所对应的重定位表中的偏移量,找到重定位表中的这个符号,这个符号有一个32位的标志,里面有符号表中的信息,接着找到符号表中的符号。以上这些从重定位表开始的操作都应该是由ld这个库里面的函数里完成的。

  0x08048340 <+0>: jmp *0x804a004

原标题:动态链接过程

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录