Use dpkg to search for any available assemblers which will work. Returns: A list of candidate package names. :: >>> pwnlib.asm.dpkg_search_for_binutils('aarch64', 'as') ['binutils-aarch64-linux-gnu']
(arch, util)
| 71 | _incdir = path.join(_basedir, 'data', 'includes') |
| 72 | |
| 73 | def dpkg_search_for_binutils(arch, util): |
| 74 | """Use dpkg to search for any available assemblers which will work. |
| 75 | |
| 76 | Returns: |
| 77 | A list of candidate package names. |
| 78 | |
| 79 | :: |
| 80 | |
| 81 | >>> pwnlib.asm.dpkg_search_for_binutils('aarch64', 'as') |
| 82 | ['binutils-aarch64-linux-gnu'] |
| 83 | """ |
| 84 | |
| 85 | # Example output: |
| 86 | # $ dpkg -S 'arm*linux*-as' |
| 87 | # binutils-arm-linux-gnu: /usr/bin/arm-linux-gnu-as |
| 88 | # binutils-arm-linux-gnueabihf: /usr/bin/arm-linux-gnueabihf-as |
| 89 | # binutils-arm-linux-gnueabihf: /usr/x86_64-linux-gnu/arm-linux-gnueabihf/include/dis-asm.h |
| 90 | # binutils-arm-linux-gnu: /usr/x86_64-linux-gnu/arm-linux-gnu/include/dis-asm.h |
| 91 | packages = [] |
| 92 | |
| 93 | try: |
| 94 | filename = 'bin/%s*linux*-%s' % (arch, util) |
| 95 | output = subprocess.check_output(['dpkg','-S',filename], universal_newlines = True) |
| 96 | for line in output.strip().splitlines(): |
| 97 | package, path = line.split(':', 1) |
| 98 | packages.append(package) |
| 99 | except OSError: |
| 100 | pass |
| 101 | except subprocess.CalledProcessError: |
| 102 | pass |
| 103 | |
| 104 | return packages |
| 105 | |
| 106 | def print_binutils_instructions(util, context): |
| 107 | """On failure to find a binutils utility, inform the user of a way |
no test coverage detected