gdb调试开启PIE且去掉符号表的程序

Posted zhijack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb调试开启PIE且去掉符号表的程序相关的知识,希望对你有一定的参考价值。

在使用gdb调试程序的时候,需要根据函数名定位或者绝对的指令地址下断点,以便程序运行到该位置后暂停,
但是有的题目开启PIE地址随机化保护的同时去掉了符号表,使得对程序定位较为困难.
以下为解决方法:
1.在/proc 目录中,每个进程都会在此目录下新建一个以进程id为名的文件夹,其中存储着进程的动态链接和地址的信息。
在每个进程的map_file文件夹中,存储着各个地址段的动态链接文件
技术分享图片
其中第一个文件即为elf基址,可据之与ida中获得的指令地址后三位确定其具体地址,实现下断点分析。
2./usr/bin目录下pmap程序。pmap + pid命令可以将该进程的地址信息和相应地址段的权限打印出
技术分享图片
第一行即为elf代码的地址信息。
在python程序中可通过
base = int(os.popen(“pmap {}| awk ‘{{print $1}}’”.format(io.pid)).readlines()[1], 16)
获取该进程的elf基址,从而调用gdb并下断点进行调试。

def DEBUG(bps = [], pie = False):
    cmd = "set follow-fork-mode parent
"
    if pie:
        base = int(os.popen("pmap {}| awk ‘{{print $1}}‘".format(io.pid)).readlines()[1], 16)
        cmd += ‘‘.join([‘b *{:#x}
‘.format(b + base) for b in bps])
    else:
        cmd += ‘‘.join([‘b *{:#x}
‘.format(b) for b in bps])
    if bps != []:
        cmd += "c"
    gdb.attach(io, cmd)

generated by haroopad


作者:辣鸡小谱尼
出处:http://www.cnblogs.com/ZHijack/
如有转载,荣幸之至!请随手标明出处;

















以上是关于gdb调试开启PIE且去掉符号表的程序的主要内容,如果未能解决你的问题,请参考以下文章

需要在 GDB 中加载共享库的调试符号

程序core了,看到的还是问号

开启内核地址随机化KASLR后, qemu 调试 kernel 不能设置断点

linux 下面怎么用gdb调试多个.c文件?

GDB远程调试,好像找不到符号

如何包含 GDB 调试符号“破坏包”?