Skip to content

Commit 292cb7d

Browse files
committed
Delay the start of gdb server
Solve the 'vMustReplyEmpty' error
1 parent 64d6057 commit 292cb7d

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

qiling/debugger/gdb/gdb.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

tests/test_debugger.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def test_gdbdebug_file_server(self):
3636

3737
# some random command test just to make sure we covered most of the command
3838
def gdb_test_client():
39-
time.sleep(DELAY)
39+
time.sleep(DELAY * 2)
4040
gdb_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
4141
netout = gdb_client.makefile('w')
4242
gdb_client.connect(('127.0.0.1',9999))
@@ -89,7 +89,7 @@ def test_gdbdebug_shellcode_server(self):
8989
ql.debugger = "gdb:127.0.0.1:9998"
9090

9191
def gdb_test_client():
92-
time.sleep(DELAY)
92+
time.sleep(DELAY * 2)
9393
gdb_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
9494
netout = gdb_client.makefile('w')
9595
gdb_client.connect(('127.0.0.1',9998))

0 commit comments

Comments
 (0)