我已经开始使用 Ghidra,我发现反编译器视图非常有用。但是,当我重命名一个变量时,该名称会在整个函数中通过该寄存器或堆栈指针的所有使用传播。在大多数情况下这是好的,但是通常当变量存储在寄存器中时,相同的寄存器将用于稍后在函数中存储不同的变量。
我的问题是:有没有办法只重命名当前行下方函数中的变量?这样,稍后使用所述寄存器将具有正确的变量名称。
我已经开始使用 Ghidra,我发现反编译器视图非常有用。但是,当我重命名一个变量时,该名称会在整个函数中通过该寄存器或堆栈指针的所有使用传播。在大多数情况下这是好的,但是通常当变量存储在寄存器中时,相同的寄存器将用于稍后在函数中存储不同的变量。
我的问题是:有没有办法只重命名当前行下方函数中的变量?这样,稍后使用所述寄存器将具有正确的变量名称。
从 2020.11.13 开始,可以使用 9.2 版本,其中包含此功能。
For registers you can do it:
Right click in the Decompiler → Commit Locals.
Right click on the variable → Split out as New Variable.
根据Jeff Muizelaar 提到的问题中的https://github.com/NationalSecurityAgency/ghidra/issues/975#issuecomment-593425470。
根据https://github.com/NationalSecurityAgency/ghidra/issues/1510#issuecomment-582052718,这仅适用于当前的寄存器,但也适用于堆栈变量。