diff --git a/README.md b/README.md index f5c0cd0..6be58bb 100644 --- a/README.md +++ b/README.md @@ -135,3 +135,4 @@ What sets dumpulator apart from sandboxes like speakeasy and qiling is that the - [herrcore](https://twitter.com/herrcore) for inspiring me to make this - [secret club](https://secret.club) +- [JetBrains](https://www.jetbrains.com/opensource/) for free PyCharm license! \ No newline at end of file diff --git a/src/dumpulator/dumpulator.py b/src/dumpulator/dumpulator.py index 811e551..4951973 100644 --- a/src/dumpulator/dumpulator.py +++ b/src/dumpulator/dumpulator.py @@ -340,14 +340,22 @@ def __init__(self, uc: Uc, x64): "cip": UC_X86_REG_EIP, }) + def _resolve_reg(self, regname): + uc_reg = self._regmap.get(regname, None) + if uc_reg is None: + raise Exception(f"Unknown register '{regname}'") + if not self._x64 and regname.startswith("r"): + raise Exception(f"Register {regname} is not available in 32-bit mode") + return uc_reg + def __getattr__(self, name: str): - return self._uc.reg_read(self._regmap[name]) + return self._uc.reg_read(self._resolve_reg(name)) def __setattr__(self, name: str, value): if name.startswith("_"): object.__setattr__(self, name, value) else: - self._uc.reg_write(self._regmap[name], value) + self._uc.reg_write(self._resolve_reg(name), value) # value = dp.regs[myname] def __getitem__(self, name: str):