chỉnh sửa java dùng bytecode

406 2 1
                                    

********

CHỈNH SỬA JAVA DÙNG BYTECODE

            **************

* ĐIỀU KIỆN:

if_acmpeq = bằng nhau (thay bằng ko bằng if_acmpne)

if_acmpne != không bằng nhau (if_acmpeq)

if_icmpeq = bằng nhau (if_icmpne)

if_icmpge >= lớn hơn hoặc bằng(if_icmplt)

if_icmpgt > lớn hơn (if_icmple)

if_icmple <= bé hơn hoặc bằng (if_icmpgt)

if_icmplt < bé hơn (if_icmpge)

if_icmpne != không bằng (if_icmpeq)

ifeq =0 bằng 0 (ifne)

ifge >=0 lớn hơn hoặc bằng 0 (iflt)

ifgt >0 lớn hơn 0 (ifle)

ifle <=0 bé hơn hoặc bằng 0 (ifgt)

iflt < bé hơn 0 (ifge)

ifne !=0 không bằng 0 (ifeq)

ifnonnull !=null không rỗng

ifnull =null nếu rỗng

* mảng array:

------------------

[n phần tử]

newarray [loại]

dup

iconst_0

[gia tri 0]

[store]

dup

iconst_1

[gia tri 1]

[store]

.......

dup

[vitri]

[gia tri n]

[store]

--------------------

gán giá trị vào mảng

[array]

[vitri index]

[giatri]

[x]astore

lấy giá trị từ mảng

[array]

[vitri index]

[x]aload

* giá trị chuỗi: 

ldc "chuoi 1 bytes index" (2b)

hoặc

ldc_w "chuỗi 2 byte index" (3b)

số byte ở đây có ý nghĩa gì? nó là dùng để chỉ vị trí của chuỗi trong bảng hằng, với ldc thì sau nó chỉ là 1byte để chỉ vị trí (0-255), còn với ldc_w thì nó dùng 2 byte để chỉ vị trí, do đó có nhiều trường hợp chỉnh sửa byte code, thấy ldc "...." và cố tình thay bằng 1 chuỗi khác lại bị lỗi, tại sao, vì những chuỗi ban đầu không bị xóa khỏi vị trí của nó, mà vị trí bảng hằng đã lớn hơn 255, những chuỗi được thêm vào đều phải là ldc_w "....." nhưng lại xảy ra 1 vấn đề, thay ldc thành ldc_w làm tăng lên 1byte, tất cả các code cũng thay đổi vị trí và như vậy xảy ra lỗi.

chỉnh sửa java dùng bytecodeNơi câu chuyện tồn tại. Hãy khám phá bây giờ