Skip to content

Commit ce86eb9

Browse files
committed
Update low-level RPC API for Py3
1 parent ec594dc commit ce86eb9

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Installation section).
5959

6060
```python
6161
>>> import bap
62-
>>> print '\n'.join(insn.asm for insn in bap.disasm("\x48\x83\xec\x08"))
62+
>>> print '\n'.join(insn.asm for insn in bap.disasm(b"\x48\x83\xec\x08"))
6363
decl %eax
6464
subl $0x8, %esp
6565
```

src/bap/rpc.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def load_symbols(self):
171171

172172
def get_symbol(self, name, d=None):
173173
try:
174-
return (s for s in self.symbols if s.name == name).next()
174+
return next(s for s in self.symbols if s.name == name)
175175
except StopIteration:
176176
return d
177177

@@ -214,8 +214,8 @@ def __init__(self, mem, parent):
214214

215215
def load_data(self):
216216
try:
217-
url = (urlparse(url) for url in self.links
218-
if urlparse(url).scheme == 'mmap').next()
217+
url = next(urlparse(url) for url in self.links
218+
if urlparse(url).scheme == 'mmap')
219219
qs = parse_qs(url.query)
220220
offset = int(qs['offset'][0])
221221
with open(url.path, "rw+b") as f:
@@ -266,8 +266,8 @@ def __init__(self, server={}):
266266
self.last_id = 0
267267
for attempt in range(RETRIES):
268268
try:
269-
self.capabilities = self.call({'init' : {
270-
'version' : '0.1'}}).next()['capabilities']
269+
self.capabilities = next(self.call({'init' : {
270+
'version' : '0.1'}}))['capabilities']
271271
break
272272
except Exception:
273273
if attempt + 1 == RETRIES:
@@ -278,7 +278,7 @@ def __init__(self, server={}):
278278
if not "capabilities" in self.__dict__:
279279
raise RuntimeError("Failed to connect to BAP server")
280280
self.data = {}
281-
self.temp = NamedTemporaryFile('rw+b', prefix="bap-")
281+
self.temp = NamedTemporaryFile('w+b', prefix="bap-")
282282

283283
def insns(self, src, **kwargs):
284284
req = {'resource' : src}
@@ -300,7 +300,7 @@ def load_file(self, name):
300300
'url' : 'file://' + name}})
301301

302302
def get_resource(self, name):
303-
return self.call({'get_resource' : name}).next()
303+
return next(self.call({'get_resource' : name}))
304304

305305
def load_chunk(self, data, **kwargs):
306306
kwargs.setdefault('url', self.mmap(data))
@@ -341,14 +341,13 @@ def mmap(self, data):
341341
return url
342342

343343
def _load_resource(self, res):
344-
rep = self.call(res).next()
344+
rep = next(self.call(res))
345345
if 'error' in rep:
346346
raise ServerError(rep)
347347
return Id(rep['resource'])
348348

349-
350349
def jsons(r, p=0):
351-
dec = json.JSONDecoder(encoding='utf-8')
350+
dec = json.JSONDecoder()
352351
while True:
353352
obj,p = dec.scan_once(r.text,p)
354353
yield obj

tests/test_low_level_interface.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import unittest
2+
import bap
3+
4+
class TestLowLevelInterface(unittest.TestCase):
5+
6+
def test_low_level_interface(self):
7+
asm_str = '\n'.join(insn.asm for insn in bap.disasm(b"\x48\x83\xec\x08"))
8+
self.assertIsNotNone(asm_str)
9+
self.assertIn("\tdecl\t%eax", asm_str)
10+
self.assertIn("\tsubl\t$0x8, %esp", asm_str)
11+
12+
if __name__ == "__main__":
13+
unittest.main()

0 commit comments

Comments
 (0)