看了我之前發的ASSEAMBLE指令,有版友提出 希望有所解說,這邊以全圖打+全圖吸數據解說之...
以下開始註解, 此行不會影響complier
[ENABLE] // 程式開始, ke看到這就會開始complier, 要說明可以在這之上寫入, 不會被complier
registersymbol(tswhaerKiKiVac) // 向ke註冊一個符號 tswhaerKiKiVac
registersymbol(tswhaerItemVac) // 向ke登記一個符號 tswhaerItemVac
alloc(tswhaerKiKiVac, 1024) // 為剛剛註冊的符號配置一段1024-bytes 記憶體區段,即這個label以下
// 的code 會被放在這一個區塊中
alloc(tswhaerItemVac, 1024) // 為剛剛註冊的符號配置一段1024-bytes 記憶體區段
tswhaerKiKiVac: // 這個label已註冊, 若未註冊會無法complier喔, 這是全圖打怪
mov edx,[7cd55c] // 抓取address 0x7cd55c的內含值
lea edx,[edx+xxx] // 將剛剛的內含值加上offset 0x354後的實際位址放入register edx中
mov ecx,[edx] // 將剛剛所得到的位址的內容值讀出入暫存器ecx, 即改變 x 軸的位置,
// 若是標賊或弓手可以保持原來的x軸石(mov ecx,[ebx+00000390]),
// 才不會用拳頭打怪.
mov edx,[7cd55c] // 讀取位址0x7cd55c的內容值且放入edx中
lea edx,[edx+xxx] // 將剛的內容值edx 加上offset 0x358後的值放入edx中
lea eax,[edx] // 將剛得到的edx放入到eax中
mov eax,[eax] // 將eax的內容值當成address, 即這位址的內容值讀出放到eax,即y軸
jmp xxxxxx // 跳到攔截位址的下面第三行指令集的位置,
// 註: 可以全圖打到怪主要是將x,y軸改變而已.讓怪好像在我們身邊.
tswhaerItemVac: // 這個label已註冊, 且被配置一段記憶體, 這是吸物數據.
pushad // 將所有暫存器(依序為eax, ecx, edx, ebx, esp, ebp, esi, edi)
// 放入堆疊區段, 因我們會改變程式中的暫存器
// 若不先保留會造成楓谷當掉.
mov ecx, [ebp+x] // 研判是讀取vc在做call時的動作所傳入的參數值, 然後放到ecx中
mov ebx, [ebp-xx] // 讀出stack 區段中的某個數值.
mov [ecx], ebx // 將讀到的值放入ecx內容的位址中
mov [ecx+4], eax // 將eax的值放入ecx+4的位址中
mov ecx, eax // 將eax的值copy一份到ecx中
mov eax, ebx // 將ebx的值搬到eax中
lea edx, [eax-xx] // 將eax的內容減0x19 之後放到edx中
mov [ebp-34], edx // 將edx傳回參數去
lea edx, [ecx-xx] // 將ecx的內容值減去0x32, 所得的值放到edx中
add eax, 19 // 將eax加0x19
add ecx, A // 將ecx加0xa
mov [ebp-30], edx // 更新參數值,vc在call時會將參數放入堆疊中, 而ebp是堆疊的
// 基底指標, 所以將edx的值傳回參數位址中
mov [ebp-xx], eax // 更新參數值
mov [ebp-xx], ecx // 更新參數值
popad // restore 剛被放入堆疊中的暫存器
push eax // 要將eax 放入堆疊中, 不然會造成原本的code出現堆疊不同的情形
jmp xxxxxx // jump 到吸物代碼的下一個位址
[disable] // 當你打勾的部份取消時, ke會將下面的label及記憶體刪除
unregistersymbol(tswhaerKiKiVac)// 註消tswhaerKiKiVac的label
unregistersymbol(tswhaerItemVac)// 註消tswhaerItemVac的label以留給其他要用的人
dealloc(tswhaerKiKiVac) // 收回記憶體空間
dealloc(tswhaerItemVac) // 收回記憶體空間
|