1. 程式人生 > >gdb調試開啟PIE且去掉符號表的程序

gdb調試開啟PIE且去掉符號表的程序

mat dash 定位 origin ott 位置 rate int base

在使用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\n"
    if pie:
        base = int(os.popen("pmap {}| awk ‘{{print $1}}‘".format(io.pid)).readlines()[1], 16)
        cmd += ‘‘.join([‘b *{:#x}\n‘.format(b + base) for b in bps])
    else:
        cmd += ‘‘.join([‘b *{:#x}\n‘.format(b) for b in bps])
    if bps != []:
        cmd += "c"
    gdb.attach(io, cmd)

generated by haroopad


作者:辣雞小譜尼
出處:http://www.cnblogs.com/ZHijack/
如有轉載,榮幸之至!請隨手標明出處;

gdb調試開啟PIE且去掉符號表的程序