|
1 | 1 | #!/usr/bin/env python2 |
2 | 2 | from __future__ import division |
3 | 3 | import argparse |
| 4 | +import keyword |
4 | 5 | import os |
5 | 6 |
|
6 | 7 | from pwnlib import constants |
|
62 | 63 |
|
63 | 64 | for name, arg in zip(argument_names, argument_values): |
64 | 65 | if arg is not None: |
65 | | - syscall_repr.append('%s=%r' % (name, arg)) |
| 66 | + syscall_repr.append('%s=%s' % (name, pwnlib.shellcraft.pretty(arg, False))) |
66 | 67 |
|
67 | 68 | # If the argument itself (input) is a register... |
68 | 69 | if arg in allregs: |
|
75 | 76 |
|
76 | 77 | # The argument is not a register. It is a string value, and we |
77 | 78 | # are expecting a string value |
78 | | - elif name in can_pushstr and isinstance(arg, (bytes, six.text_type)): |
79 | | - if not isinstance(arg, bytes): |
| 79 | + elif name in can_pushstr and isinstance(arg, (six.binary_type, six.text_type)): |
| 80 | + if isinstance(arg, six.text_type): |
80 | 81 | arg = arg.encode('utf-8') |
81 | 82 | string_arguments[name] = arg |
82 | 83 |
|
@@ -144,12 +145,11 @@ def can_be_array(arg): |
144 | 145 |
|
145 | 146 |
|
146 | 147 | def fix_bad_arg_names(func, arg): |
147 | | - if arg.name == 'str': |
148 | | - return 'str_' |
149 | 148 | if arg.name == 'len': |
150 | 149 | return 'length' |
151 | | - if arg.name == 'repr': |
152 | | - return 'repr_' |
| 150 | + |
| 151 | + if arg.name in ('str', 'repr') or keyword.iskeyword(arg.name): |
| 152 | + return arg.name + '_' |
153 | 153 |
|
154 | 154 | if func.name == 'open' and arg.name == 'vararg': |
155 | 155 | return 'mode' |
@@ -277,8 +277,10 @@ def generate_one(target): |
277 | 277 | CALL.format(**template_variables) |
278 | 278 | ] |
279 | 279 |
|
280 | | - with open(os.path.join(target, name + '.asm'), 'wt+') as f: |
281 | | - f.write('\n'.join(map(str.strip, lines))) |
| 280 | + if keyword.iskeyword(name): |
| 281 | + name += '_' |
| 282 | + with open(os.path.join(target, name + '.asm'), 'wt') as f: |
| 283 | + f.write('\n'.join(map(str.strip, lines)) + '\n') |
282 | 284 |
|
283 | 285 | if __name__ == '__main__': |
284 | 286 | p = argparse.ArgumentParser() |
|
0 commit comments