********
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.
BẠN ĐANG ĐỌC
chỉnh sửa java dùng bytecode
ChickLitgiới thiệu về những thứ cơ bản để có thể chỉnh sửa game và app dựa trên bytecode