2014-04-04 13 views
18

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.

Trả lời

1

Người đăng ký không thể hoán đổi cho nhau. Một số hướng dẫn chỉ chấp nhận thanh ghi 0-15, số khác 0-255, do đó cách tiếp cận này sẽ không hoạt động.

Các vấn đề liên quan