@@ -58,25 +58,18 @@ def __init__(self, ql, ip, port):
5858 else :
5959 port = int (port )
6060
61+ self .ip = ip
62+ self .port = port
63+
6164 if ql .shellcoder :
6265 load_address = ql .os .entry_point
6366 exit_point = load_address + len (ql .shellcoder )
6467 else :
6568 load_address = ql .loader .load_address
6669 exit_point = load_address + os .path .getsize (ql .path )
6770
68- logging .info ("gdb> Listening on %s:%u" % (ip , port ))
6971 self .gdb .initialize (self .ql , exit_point = exit_point , mappings = [(hex (load_address ))])
7072
71- sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
72- sock .bind ((ip , port ))
73- sock .listen (1 )
74- clientsocket , addr = sock .accept ()
75-
76- self .clientsocket = clientsocket
77- self .netin = clientsocket .makefile ('r' )
78- self .netout = clientsocket .makefile ('w' )
79-
8073 if self .ql .ostype in (QL_OS .LINUX , QL_OS .FREEBSD ) and not self .ql .shellcoder :
8174 self .entry_point = self .ql .os .elf_entry
8275 else :
@@ -139,12 +132,28 @@ def incomplete_hex_check(hexchar):
139132
140133 return unhexlify (rawbin_escape )
141134
135+ def setup_server (self ):
136+ logging .info ("gdb> Listening on %s:%u" % (self .ip , self .port ))
137+
138+ sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
139+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
140+ sock .bind ((self .ip , self .port ))
141+ sock .listen (1 )
142+ clientsocket , addr = sock .accept ()
143+
144+ self .sock = sock
145+ self .clientsocket = clientsocket
146+ self .netin = clientsocket .makefile ('r' )
147+ self .netout = clientsocket .makefile ('w' )
148+
142149 def close (self ):
143150 self .netin .close ()
144151 self .netout .close ()
145152 self .clientsocket .close ()
153+ self .sock .close ()
146154
147155 def run (self ):
156+ self .setup_server ()
148157
149158 while self .receive () == 'Good' :
150159 pkt = self .last_pkt
0 commit comments