写着玩-简短过渡之共享库的组织
文章目录
0x00 口胡
本篇是简短过渡,由于书中该章节中的前3小节讲了一些太过于细致的东西,在本人开来,不是太重要,反而有点麻烦,就不在这里展开了
共享库和共享对象,我们可以把它看做一个概念
本篇姿势较少。。。
0x01 共享库系统路径
0x02 共享库查找过程
知道这个查找路径,对做pwn有一定帮助
不同的系统中,上面的各个文件的名字或路径可能有所不同,比如FreeBSD的SO-NAME缓存文件是/var/run/ld-elf.so.hints,我们可以通过ldconfig的man来查看相应的变化
0x03 环境变量
修改程序加载的libc可以通过修改环境变量的方式来实现
0x04 共享库的创建和安装
共享库的创建
几个注意的点:
- 不要把输出共享库中的符号和调试信息去掉,也不要使用GCC的”-formit-frame-pointer”选项
- 使用链接器的”-rpath”选项(或者GCC的-WI(-WI选项后面跟的参数是传递给链接器的),这种方法可以指定链接产生的目标程序的共享库查找路径)。
- 当程序使用dlopen()动态加载某个共享模块,而该共享模块须反向引用主模块的符号时,有可能主模块的某些符号因为在链接时没有被反向引用而没有被放到动态符号表里面,导致反向引用失败,ld链接器提供了一个”-export-dynamic”的参数,这个参数表示链接器在生产可执行文件时,将所有全局符号导出到动态符号表,以防止出现上述问题,当然也可以GCC -WI -export-dynamic
清除符号信息
共享库的安装
共享库构造和析构函数
顾名思义,就是在共享库被装载时能够进行一些初始化操作,可以用来干一些猥琐的事情。GCC提供了一种构造函数机制:
0x05 小个结
没必要小结,就这样。。。