alloc(newmem,4048,"DiabloImmortal.exe"+7B44A4)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:


push rax
push r9
mov rax,newmem+500 // vtmem


// ==========================================
// Khối if63 - CHỈ DÙNG DUY NHẤT R9
// ==========================================
cmp byte ptr [rcx+133],01
jne if63
cmp [rcx+70],(float)10
jb if63
cmp [rcx+70],(float)590
ja if63
cmp [rcx+74],(float)50
jb if63
cmp [rcx+74],(float)600
ja if63

// 1. Đọc [rcx+B0] vào r9 và chặn crash
mov r9, [rcx+B0]
cmp r9, 10000           // Nếu rỗng hoặc rác -> thoát
jl _ClearAndExit

mov [rax+8*63], rcx     // Lưu rcx gốc vào slot 63

// 2. TRƯỜNG HỢP TEXT NGẮN:
lea r9, [r9+50]         // Lệnh 'lea' tính: r9 = r9 + 50. Lúc này r9 chứa ĐỊA CHỈ của Text ngắn.
mov [rax+8*64], r9      // Lưu địa chỉ Text ngắn vào slot 64

// 3. TRƯỜNG HỢP TEXT DÀI (Pointer):
mov r9, [r9]            // Vì r9 đang là địa chỉ ở bước trên, ta bọc [] để đọc pointer bên trong nó
mov [rax+8*65], r9      // Lưu pointer Text dài vào slot 65
_ClearAndExit:

if63:
pop r9
pop rax





cmp byte ptr [rcx+00000133],00

exit:
jmp returnhere

"DiabloImmortal.exe"+7B44A4:
jmp newmem
nop
nop
returnhere:

