对于开启PIE的ELF文件调试方法
最近调试程序时候遇到很多题目开启了PIE保护
![checksec](/2019/08/29/%E5%AF%B9%E4%BA%8E%E5%BC%80%E5%90%AFPIE%E7%9A%84ELF%E6%96%87%E4%BB%B6%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95/check.png)
加上大部分将符号表删除,这对于使用GDB来下断点来说比较难以定位,以下将几种常见的做法总结。
查看ELF基址
稍微复杂的方法是查看程序运行时ELF基址,然后与获取的偏移地址相加,有两种方式可以查看一种使用pamp来查看进程的地址段及其权限,另一种方法为查看生成的动态链接文件。
pmap
在GDB调试程序时先执行run命令
![run](/2019/08/29/%E5%AF%B9%E4%BA%8E%E5%BC%80%E5%90%AFPIE%E7%9A%84ELF%E6%96%87%E4%BB%B6%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95/run.png)
然后使用ps -A查看进程的PID
![获取进程PID](/2019/08/29/%E5%AF%B9%E4%BA%8E%E5%BC%80%E5%90%AFPIE%E7%9A%84ELF%E6%96%87%E4%BB%B6%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95/pid.png)
使用pmap PID
![pmap查看地址段](/2019/08/29/%E5%AF%B9%E4%BA%8E%E5%BC%80%E5%90%AFPIE%E7%9A%84ELF%E6%96%87%E4%BB%B6%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95/pmap.png)
第一行即为ELF基址
查看动态链接文件
这种方式与pmap方式相似,在找出进程PID后,查看/proc/
![查看动态链接文件](/2019/08/29/%E5%AF%B9%E4%BA%8E%E5%BC%80%E5%90%AFPIE%E7%9A%84ELF%E6%96%87%E4%BB%B6%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95/map_files.png)
b *$rebase(addr)
pwngdb插件提供了rebase命令可以快速定位偏移地址,使用方法为b *$rebase(偏移地址)
![rebase](/2019/08/29/%E5%AF%B9%E4%BA%8E%E5%BC%80%E5%90%AFPIE%E7%9A%84ELF%E6%96%87%E4%BB%B6%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95/rebase.png)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 F11st's Cyber Journey!