zoukankan      html  css  js  c++  java
  • 动态链接过程

      最近学习了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
      0x08048346 <+6>: push $0x8
      0x0804834b <+11>: jmp 0x8048320

      实际上这个偏移量8对应的就是地址0x804a004,ld将会找到正确的地址赋给指针0x804a004。

      

  • 相关阅读:
    js正则还原和转义特殊字符
    element表格鼠标悬浮上带有点击事件的变红-:row-class-name
    elemen-table表格数据转换-formatter属性
    SVN的安装及汉化的
    element中关于input框
    VUE之兄弟组件 $emit和$on、$bus的用法
    关于element表单校验(二)
    关于element表单校验(一)
    element表格里数据处理
    各类手册收藏整理
  • 原文地址:https://www.cnblogs.com/leo0000/p/5604025.html
Copyright © 2011-2022 走看看