請問[ICS人物左右走]的數據這幾版是否有更動
本帖最後由 anderson101866 於 2014-12-30 23:01 編輯如標題, 不好意思請問各位高手各位大大orz
我從下面這篇(172.1)ICS更新以後, 在175.1左右走功能運作不正常
https://bingfong.com/forum.php?mod ... 440&highlight=人物左右走
就是一Enable, 人物就會卡在原地不能移動, Disable後才恢復可以行動這樣, 可是不會左右走@@
想問一下是不是有更動 導致不能只更新那些Address了:'(
弄了[座標左右走]跟[人物左右走]都一樣 不知怎麼回事orz
搞了一個晚上了XD 有人能夠指點小的迷津一下嗎>< 感激不盡!!....//TwMs_V175.1_ICS_人物左右走
//Author: zengden
//更新時間:2014-07-24
Alloc(AutoLRICSEntry, 64)
Label(ICSReturn)
RegisterSymbol(AutoLRMain)
Alloc(AutoLRMain, 128)
Label(GoLeft)
Label(GoRight)
RegisterSymbol(AutoLRRange)
Alloc(AutoLRRange, 4)
Alloc(AutoLRValue, 4)
//-----------------------------------------------
AutoLRRange:
DD A //距離 16進制 A=10
//-----------------------------------------------
AutoLRICSEntry:
Cmp , 00EB3E2D //3B ?? 0F ?? ?? ?? ?? ?? 8B 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 85
Jne ICSReturn
Mov , AutoLRMain
ICSReturn:
Jmp GetFocus
//-------------------
AutoLRMain:
Cmp , 0
Je 00EB3E2D
Push Eax
Inc
Mov Eax,
Cmp Eax,
Jge GoLeft
Add Eax,
Cmp Eax,
Jge GoRight
Mov , 1
Jmp GoLeft
GoLeft:
Mov , FFFFFFFF
Pop Eax
Jmp 00EB4280 //0f 9c ?? ?? 33 ?? 39 ?? ?? 0f
GoRight:
Mov , 00000001
Pop Eax
Jmp 00EB4280
//-----------------------------------------------
//AoB and the first 4 ?? is the target
//FF 15 ?? ?? ?? ?? 3B 45 ?? 75 ?? 8B 0D ?? ?? ?? ?? E8
0165D7C8:
DD AutoLRICSEntry
0165D7C8:
DD GetFocus
Dealloc(AutoLRICSEntry)
UnregisterSymbol(AutoLRMain)
Dealloc(AutoLRMain)
UnregisterSymbol(AutoLRRange)
Dealloc(AutoLRRange)
Dealloc(AutoLRValue) GoRight跟GoLeft地方沒更新到 s99471379 發表於 2014-12-30 23:01
GoRight跟GoLeft地方沒更新到
這個地方我一直不懂... sorry
GoLeft:
Mov , FFFFFFFF
從以前到現在不懂那邊要怎麼更新 ( 這種型式)
-04是說四個字節(Byte)之前嗎?
上次也有爬到你的回文,說要用"彙編代碼搜尋"的也是這個媽
因為上次就看不懂了 不好意思 能不能講的詳細一點,
或者有甚麼關鍵字適合的,我去google找看有沒有古文!
真的很感謝你的回答>< anderson101866 發表於 2014-12-30 23:35
這個地方我一直不懂... sorry
GoLeft:
or
通常是指該層CALL所申請的臨時變數
會依據所申請的大小而受影響 (當然還有其他...)
要看Stack變化!
建議你試試看 :lol 本帖最後由 MS88088 於 2014-12-31 00:08 編輯
anderson101866 發表於 2014-12-30 23:35
這個地方我一直不懂... sorry
GoLeft:
v1.71.2 ---> 00E337C2 - 55 - push ebp
00E337C3 - 8B EC - mov ebp,esp
00E337C5 - 83 EC 24 - sub esp,24
00E337C8 - 53 - push ebx
00E337C9 - 56 - push esi
00E337CA - 57 - push edi
V1.75.100EB3C55 - 6A 28 - push 28
00EB3C57 - B8 7B2A1601 - mov eax,01162A7B :
00EB3C5C - E8 5D990F00 - call 00FAD5BE
00EB3C61 - 8B D9 - mov ebx,ecx
兩者差上4*3 = 12 BYTES = 0C (16進位)
所以你可以試試看 = or = (<--這個別學嘿 自己亂來的 非正式知識)
//------------------------------------------------------------------------------------------------------------------------------------------------------
當然你也可以直接跳下去下面看~ MS88088 發表於 2014-12-30 23:59
or
通常是指該層CALL所申請的臨時變數
可以了耶XD 成功 所以這是經驗嗎..
不過為什麼你會猜-10呀@@
不是通常多個4Byte的變數比較常見嗎XD 就多-4這樣
還是有甚麼撇步, 或者你們是怎麼看就知道這需要更新 而171~172的時候就不更新維持 @@ anderson101866 發表於 2014-12-31 00:15
可以了耶XD 成功 所以這是經驗嗎..
不過為什麼你會猜-10呀@@
CE就有功能可以反白整個函數(不一定每次都正確就是了…)
通常不會去算啦! 直接跳下去看下面就好了… 本帖最後由 anderson101866 於 2014-12-31 00:51 編輯
MS88088 發表於 2014-12-31 00:30
CE就有功能可以反白整個函數(不一定每次都正確就是了…)
通常不會去算啦! 直接跳下去看下面就好了… ...
有了 看到你前面說的函數了@@ 本帖最後由 anderson101866 於 2014-12-31 04:25 編輯
MS88088 發表於 2014-12-31 00:07
v1.71.2 ---> V1.75.1兩者差上4*3 = 12 BYTES = 0C (16進位)
所以你可以試試看 = ...
感謝 我懂了XD
因為原本172.1的Function:00E3B23F - 55 - push ebp
00E3B240 - 8B EC - mov ebp,esp
00E3B242 - 83 EC 24 - sub esp,24
...
00E3B252 - 8B CF - mov ecx,edi <<
00E3B254 - 89 7D EC - mov ,edi <<=========
00E3B257 - FF 50 18 - call dword ptr <<
00E3B25A - 8B CF - mov ecx,edi <<
與175.1MapleStory.exe+AB3C55 - 6A 28 - push 28
MapleStory.exe+AB3C57 - B8 7B2A1601 - mov eax,MapleStory.exe+D62A7B
MapleStory.exe+AB3C5C - E8 5D990F00 - call MapleStory.exe+BAD5BE
MapleStory.exe+AB3C61 - 8B D9 - mov ebx,ecx
MapleStory.exe+AB3C63 - 8B 3D 68A16401 - mov edi,
MapleStory.exe+AB3C69 - 8B 07 - mov eax,
MapleStory.exe+AB3C6B - 8B CF - mov ecx,edi <<
MapleStory.exe+AB3C6D - 89 7D E0 - mov ,edi <<===
MapleStory.exe+AB3C70 - FF 50 20 - call dword ptr <<
MapleStory.exe+AB3C73 - 8B CF - mov ecx,edi <<
原本同一個區域變數 變成, 所以多了(0x20-0x14)的offset
, 也就是猜想原本的區域變數被往後挪到 的位置了:lol
不過你是怎麼直接看出他是4*3的呀XD 經驗嗎(?:dizzy:)
我只看得懂172.1那個Function的Entry
175.1的Entry我看不懂XDD
172.1:00E3B23F - 55 - push ebp //推入caller的ebp
00E3B240 - 8B EC - mov ebp,esp //此function的ebp指向esp
00E3B242 - 83 EC 24 - sub esp,24 //esp分配24的空間給local variable175.1:MapleStory.exe+AB3C55 - 6A 28 - push 28 //傳入參數28
MapleStory.exe+AB3C57 - B8 7B2A1601 - mov eax,MapleStory.exe+D62A7B //?
MapleStory.exe+AB3C5C - E8 5D990F00 - call MapleStory.exe+BAD5BE //?
MapleStory.exe+AB3C61 - 8B D9 - mov ebx,ecx //?
MapleStory.exe+AB3C63 - 8B 3D 68A16401 - mov edi, //?
...後面就都跨謀了哈哈, 只好用猜的:P
另外我有找到一個網站, 很清楚地講172.1的那個Entry是怎麼做的
說明esp, ebp還有local variable / function parameter / return address的相對位置
以後應該比較看得懂啦XD
推薦給大家, 有同樣問題的朋友可以看下面這網址, 再來看這篇, 會比較看得懂在做啥:)
http://en.wikibooks.org/wiki/X86 ... ns_and_Stack_Frames
anderson101866 發表於 2014-12-31 04:21
感謝 我懂了XD
因為原本172.1的Function:與175.1原本同一個區域變數 變成, 所以多了(0x2 ...
因為差3個PUSH的大小啊!
好難得有人查英文資料…我英文不怎麼好的說 xDD 本帖最後由 anderson101866 於 2015-1-1 16:50 編輯
MS88088 發表於 2014-12-31 09:07
因為差3個PUSH的大小啊!
好難得有人查英文資料…我英文不怎麼好的說 xDD ...
因為沒找到夠清楚的中文資料呀XDD
我看的也是半懂 不過他有圖解!
最清楚的是下面這張
MyFunction2(10, 5, 2);
可以看成
push 2
push 5
push 10
push eip + 2 ; return address is current address + size of two instructions
jmp _MyFunction2
即
<Stack底部>
: :
| 2 | (3rd function argument)
| 5 | (2nd argument)
| 10 | (1st argument)
| RA | (return address)
| FP | (old ebp value)
| | (1st local variable)
: :
<Stack頂部>
一目了然呀XDDD
頁:
[1]