文章目录
  1. 1. 0x00 口胡
  2. 2. 0x01 共享库系统路径
  3. 3. 0x02 共享库查找过程
  4. 4. 0x03 环境变量
  5. 5. 0x04 共享库的创建和安装
    1. 5.1. 共享库的创建
    2. 5.2. 清除符号信息
    3. 5.3. 共享库的安装
    4. 5.4. 共享库构造和析构函数
  6. 6. 0x05 小个结

0x00 口胡

本篇是简短过渡,由于书中该章节中的前3小节讲了一些太过于细致的东西,在本人开来,不是太重要,反而有点麻烦,就不在这里展开了

共享库和共享对象,我们可以把它看做一个概念

本篇姿势较少。。。

0x01 共享库系统路径

0x02 共享库查找过程

知道这个查找路径,对做pwn有一定帮助


不同的系统中,上面的各个文件的名字或路径可能有所不同,比如FreeBSD的SO-NAME缓存文件是/var/run/ld-elf.so.hints,我们可以通过ldconfig的man来查看相应的变化

0x03 环境变量

修改程序加载的libc可以通过修改环境变量的方式来实现







0x04 共享库的创建和安装

共享库的创建

几个注意的点:

  1. 不要把输出共享库中的符号和调试信息去掉,也不要使用GCC的”-formit-frame-pointer”选项
  2. 使用链接器的”-rpath”选项(或者GCC的-WI(-WI选项后面跟的参数是传递给链接器的),这种方法可以指定链接产生的目标程序的共享库查找路径)。
  3. 当程序使用dlopen()动态加载某个共享模块,而该共享模块须反向引用主模块的符号时,有可能主模块的某些符号因为在链接时没有被反向引用而没有被放到动态符号表里面,导致反向引用失败,ld链接器提供了一个”-export-dynamic”的参数,这个参数表示链接器在生产可执行文件时,将所有全局符号导出到动态符号表,以防止出现上述问题,当然也可以GCC -WI -export-dynamic

清除符号信息

共享库的安装


共享库构造和析构函数

顾名思义,就是在共享库被装载时能够进行一些初始化操作,可以用来干一些猥琐的事情。GCC提供了一种构造函数机制:



0x05 小个结

没必要小结,就这样。。。

文章目录
  1. 1. 0x00 口胡
  2. 2. 0x01 共享库系统路径
  3. 3. 0x02 共享库查找过程
  4. 4. 0x03 环境变量
  5. 5. 0x04 共享库的创建和安装
    1. 5.1. 共享库的创建
    2. 5.2. 清除符号信息
    3. 5.3. 共享库的安装
    4. 5.4. 共享库构造和析构函数
  6. 6. 0x05 小个结