hugsy / gef-extras

Extra goodies for GEF to (try to) make GDB suck even less
https://hugsy.github.io/gef-extras
MIT License
150 stars 50 forks source link

Installation Error: Missing `capstone-disassemble` #120

Open H0r53 opened 14 hours ago

H0r53 commented 14 hours ago

Bug Report

Step 1: Describe your environment

Step 2: Describe your problem

Fresh installation of GEF and GEF-extras. However, on running GDB an error/warning occurs regarding one of the GEF plugins for capstone.

gef➤  gef missing
[*] Missing `capstone-disassemble`: reason: 'capstone-disassemble.use-capstone')

I've verified that capstone is installed via pip

Steps to reproduce

  1. Update system: sudo apt update -y && sudo apt upgrade -y
  2. Install GEF: bash -c "$(curl -fsSL https://gef.blah.cat/sh)"
  3. Install gef-extras: wget -q -O- https://github.com/hugsy/gef/raw/main/scripts/gef-extras.sh | sh
  4. Launch gdb: gdb

gdb / gef output:

93 commands loaded and 5 functions added for GDB 9.2 in 0.00ms using Python engine 3.8
Traceback (most recent call last):
  File "/home/ubuntu/.config/gef-extras/scripts/emulate/__init__.py", line 12, in <module>
    import unicorn
  File "/home/ubuntu/.local/lib/python3.8/site-packages/unicorn/__init__.py", line 4, in <module>
    from .unicorn import Uc, ucsubclass, uc_version, uc_arch_supported, version_bind, debug, UcError, __version__
  File "/home/ubuntu/.local/lib/python3.8/site-packages/unicorn/unicorn.py", line 14, in <module>
    from .unicorn_py3 import *
  File "/home/ubuntu/.local/lib/python3.8/site-packages/unicorn/unicorn_py3/__init__.py", line 1, in <module>
    from .unicorn import *
  File "/home/ubuntu/.local/lib/python3.8/site-packages/unicorn/unicorn_py3/unicorn.py", line 200, in <module>
    uclib = __load_uc_lib()
  File "/home/ubuntu/.local/lib/python3.8/site-packages/unicorn/unicorn_py3/unicorn.py", line 99, in __load_uc_lib
    resources.files("unicorn") / 'lib'
AttributeError: module 'importlib.resources' has no attribute 'files'
Traceback (most recent call last):
  File "/home/ubuntu/.config/gef-extras/scripts/libc_function_args/tables/generator.py", line 32, in <module>
    function_dict: dict[str, List[str]], _params: List[str], outfile_name: pathlib.Path
TypeError: 'type' object is not subscriptable

Observed Results

Error in loading gef-extras out of the box

Expected results

GDB & GEF launch with no errors

hugsy commented 14 hours ago

From your traceback, the issue comes from the unicorn support for 3.8, not GEF.

Traceback (most recent call last):
[...]
    uclib = __load_uc_lib()
  File "/home/ubuntu/.local/lib/python3.8/site-packages/unicorn/unicorn_py3/unicorn.py", line 99, in __load_uc_lib
    resources.files("unicorn") / 'lib'
AttributeError: module 'importlib.resources' has no attribute 'files'

This is a well-known Python < 3.9 issue, you can google around for some workarounds, but the best fix is to use a more modern version of Python. You can try pinning the version unicorn used too.

Regardless, this is not GEF-specific.