patchelf
之前为了图方便,一直使用clibc改变二进制文件的libc,但是这样改变会导致符号表没有导入。这样你在gdb的时候输入
p &environ
这样的指令去查询函数或变量位置是无效的。
需要引入debug文件才能查询符号表。
最好的做法是在先查询libc具体版本
然后在glibc-all-in-one中下载相应的libc,
最后直接引入ld和整体路径
patchelf --set-interpreter ld文件名 ./pwn
patchelf --set-rpath 下载的libc文件夹 ./pwn
这样就能查询各函数和变量了。
常用的有:
p &_rtld_global.dl_rtld_lock_recursive
打印exit_hook地址
environ
这个标识符存在于libc中,保存当前程序的环境变量地址,也就是包含栈中的一些地址,可以通过打印environ中的内容获取栈的地址。