方法1
可以安装gdb的pwndbg插件
使用
b *$rebase(0x相对基址偏移)
方法二
可以先找到pie
$ ps -aux|grep task_shoppingCart
hu 6158 0.0 0.0 4356 632 pts/18 S+ 07:50 0:00 ./task_shoppingCart
hu 6162 0.0 0.0 21292 1088 pts/20 S+ 07:51 0:00 grep --color=auto task_shoppingCart
可以通过pie找到其基址
/proc/6158/map_files$ ls
557d7b317000-557d7b319000 7f0d1da3c000-7f0d1dc3c000 7f0d1de6b000-7f0d1de6c000
557d7b518000-557d7b519000 7f0d1dc3c000-7f0d1dc40000 7f0d1de6c000-7f0d1de6d000
557d7b519000-557d7b51a000 7f0d1dc40000-7f0d1dc42000
7f0d1d87c000-7f0d1da3c000 7f0d1dc46000-7f0d1dc6c000
基址为0x557d7b317000
真实地址=0x557d7b317000+偏移(ida中地址后三位)
可以在python中进行gdb.attach
def DEBUG(bps=[],pie =False):
cmd ='set follow-fork-mode parent\n'
#cmd=''
if pie:
base =int(os.popen("pmap {}|awk '{{print $1}}'".format(p.pid)).readlines()[1],16)
#base =int(os.popen("pmap -x {0} ".format(p.pid)).readlines()[2][:16],16)
cmd +=''.join(['b *{:#x}\n'.format(b+base) for b in bps])
else:
cmd+=''.join(['b *$rebase({:#x})\n'.format(b) for b in bps])
# if bps !=[]:
# cmd +='c'
pwnlib.gdb.attach(p,cmd)
方法三
ida远程调试
~/Documents/idaserver$ sudo ./linux_server64
IDA Linux 64-bit remote debug server(ST) v1.22. Hex-Rays (c) 2004-2017
Listening on 0.0.0.0:23946...