mọi người. Tôi đã gặp một vấn đề về thiết bị đo đạc trên Dalvik bytecode.Thêm sổ đăng ký mới trên Dalvik bytecode
Bytecode nguồn gốc là:
virtual methods
.method public onClick(Landroid/view/View;)V
.locals 12
.param p1, "v" # Landroid/view/View;
...
return-void
.end method
Để in một cái gì đó, tôi cần phải thêm 4 thanh ghi mới. Tuy nhiên, 12 (địa phương) +2 (đối số) +4 (mới)> 16 sẽ dẫn đến sự cố đối với một số lệnh.
Vì vậy, tôi nghĩ ra một ý tưởng trong thổi cách:
Số lượng toàn bộ thanh ghi là 20. v0-v11 là địa phương, v18-V19 là đối số.
Di chuyển v18-v19 đến v12-v13 lúc đầu và các thanh ghi đối số nằm trong v15. Ngoài ra,
chúng tôi cần sửa đổi p0 thành v12, p1 thành v13.
Nếu chúng tôi muốn sử dụng 4 thanh ghi mới, hãy chuyển v0-v3 sang v14-17. Sau khi xử lý 4 thanh ghi mới, di chuyển v14-v17 sang v0-v3 trở lại.
Các bytecode mới trở thành:
virtual methods
.method public onClick(Landroid/view/View;)V
.locals 18
.param p1, "v" # Landroid/view/View;
move v12, v18
move v13, v19
...
//want to use 4 new registers
move v14, v0
move v15, v1
move v16, v2
move v17, v3
//use 4 new registers
move v0, v14
move v1, v15
move v2, v16
move v3, v17
return-void
.end method
Thật không may, tôi gặp Java.lang.VerifyError
. Có ai giúp tôi không? Cảm ơn bạn.