avatartwo / avatar2

Python core of avatar²
Apache License 2.0
518 stars 98 forks source link

Target.read_register() over GDB fails for arm 'ip' register. #91

Closed valuta1995 closed 2 years ago

valuta1995 commented 3 years ago

While working with some automation on top of Avatar2, capstone produced the name 'ip' for the register 'r12'. When querying Avatar2 for 'ip' it fails with the KeyError below.

As far as I can tell, this dictionary is populated (partially) by a request from gdb, which does not have the 'ip' naming. For now I will replace 'ip' with 'r12' in my code, but this may be worth supporting in Avatar2.

File "/home/valuta/PycharmProjects/d4a-beta/a2h/instructions.py", line 13, in load_reg_value
    return target.read_register(reg_name)
  File "/home/valuta/PycharmProjects/avatar2fork/avatar2/avatar2/watchmen.py", line 78, in watchtrigger
    ret = func(self, *args, **kwargs)
  File "/home/valuta/PycharmProjects/avatar2fork/avatar2/avatar2/targets/target.py", line 408, in read_register
    return self.protocols.registers.read_register(register)
  File "/home/valuta/PycharmProjects/avatar2fork/avatar2/avatar2/protocols/gdb.py", line 697, in read_register
    self._origin.regs._get_nr_from_name(reg)
  File "/home/valuta/PycharmProjects/avatar2fork/avatar2/avatar2/targets/target.py", line 127, in _get_nr_from_name
    return self.__dict__[reg_name]
KeyError: 'ip'
rawsample commented 3 years ago

Hi @valuta1995, Thanks for the suggestion, I added an alias within the registers.