【问题标题】:Smali: Increase number of registersSmali:增加寄存器数量
【发布时间】:2019-03-13 19:22:56
【问题描述】:

我需要一个额外的寄存器来在 smali 方法中存储一个字符串。我知道 smali 代码中的寄存器逻辑(参见https://github.com/JesusFreke/smali/wiki/Registers),但我仍然想知道如何归档增加的寄存器。

假设我有一个带有 .locals n 的方法。现在我想要 .locals n+1。首先,我想迭代该方法并将每个 v 寄存器(v0 -> v1,v1 -> v2)加 1。然后 v0 将是我的新寄存器,我不会破坏任何现有数据。此外,我保持 p 和 v 寄存器之间的对齐。

不幸的是,这种简单的方法会导致代码无法编译。我不知道为什么。我错过了什么?

【问题讨论】:

    标签: android smali


    【解决方案1】:

    不幸的是,没有简单、有保证的方法来做到这一点。但是,最接近的事情是增加.registers.locals 中的寄存器数量,就像您描述的那样,然后最后一个非参数寄存器将可供您使用。另外,确保文件没有使用 -p/--no-parameter-registers 选项反汇编,以便所有参数寄存器都使用自己的编号方案,因此它们不会受到影响通过寄存器的增加。

    使用这种方法时您可能会遇到的一个问题是由于参数寄存器被撞到了一个寄存器。这可能会导致问题,例如,如果参数寄存器之一映射到 v15,然后它会降低到 v16。这可能是个问题,因为很多指令只能接受 v0 到 v15。因此,在这些情况下,您可能需要添加另一个或两个临时寄存器,并使用寄存器值来玩音乐椅,将值交换进出低位寄存器,以便在只能寻址前 16 个寄存器的指令中使用。

    由于这样做的复杂性,我通常建议您尽量避免更改现有方法中的寄存器数量。而是尝试在新方法中实现逻辑,然后您可以从现有方法调用,而无需分配新寄存器。当然,这取决于你想要做什么,这并不总是可行的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-11
      • 2020-03-27
      • 2017-05-07
      • 1970-01-01
      • 2019-11-20
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多