Hello guys,
I am trying to reverse the function UseAction which is called when for example a spell is cast. However I am having problems finding out what parameters the function takes... Can someone maybe help me a bit? Here is the assembler of that function (WoW 4.06a):
Code:
017338A0 >/. 55 PUSH EBP
017338A1 |. 8BEC MOV EBP,ESP
017338A3 |. 83EC 08 SUB ESP,8
017338A6 |. 57 PUSH EDI
017338A7 |. 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8]
017338AA |. 6A 01 PUSH 1 ; /Arg2 = 00000001
017338AC |. 57 PUSH EDI ; |Arg1
017338AD |. E8 AE28B8FF CALL Wow.012B6160 ; \Wow.012B6160
017338B2 |. 83C4 08 ADD ESP,8
017338B5 |. 85C0 TEST EAX,EAX
017338B7 |. 74 54 JE SHORT Wow.0173390D
017338B9 |. 56 PUSH ESI
017338BA |. 6A 01 PUSH 1 ; /Arg2 = 00000001
017338BC |. 57 PUSH EDI ; |Arg1
017338BD |. E8 AE29B8FF CALL Wow.012B6270 ; \Wow.012B6270
017338C2 |. 83C4 08 ADD ESP,8
017338C5 |. E8 06B30900 CALL Wow.017CEBD0
017338CA |. 8BF0 MOV ESI,EAX
017338CC |. 6A 01 PUSH 1
017338CE |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
017338D1 |. 50 PUSH EAX
017338D2 |. 6A 00 PUSH 0 ; /Arg3 = 00000000
017338D4 |. 6A 02 PUSH 2 ; |Arg2 = 00000002
017338D6 |. 57 PUSH EDI ; |Arg1
017338D7 |. 4E DEC ESI ; |
017338D8 |. E8 432AB8FF CALL Wow.012B6320 ; \Wow.012B6320
017338DD |. 83C4 0C ADD ESP,0C
017338E0 |. 50 PUSH EAX ; |Arg1
017338E1 |. E8 CA5DBAFF CALL Wow.012D96B0 ; \Wow.012D96B0
017338E6 |. 83C4 0C ADD ESP,0C
017338E9 |. 84C0 TEST AL,AL
017338EB |. 74 18 JE SHORT Wow.01733905
017338ED |. 6A 00 PUSH 0
017338EF |. 6A 03 PUSH 3
017338F1 |. 57 PUSH EDI
017338F2 |. E8 292AB8FF CALL Wow.012B6320
017338F7 |. 50 PUSH EAX ; |Arg3
017338F8 |. 8D4D F8 LEA ECX,DWORD PTR SS:[EBP-8] ; |
017338FB |. 51 PUSH ECX ; |Arg2
017338FC |. 56 PUSH ESI ; |Arg1
017338FD |. E8 BEFBFFFF CALL Wow.017334C0 ; \Wow.017334C0
01733902 |. 83C4 18 ADD ESP,18
01733905 |> 5E POP ESI
01733906 |. 33C0 XOR EAX,EAX
01733908 |. 5F POP EDI
01733909 |. 8BE5 MOV ESP,EBP
0173390B |. 5D POP EBP
0173390C |. C3 RETN
0173390D |> 68 E0359A01 PUSH Wow.019A35E0 ; /Arg2 = 019A35E0 ASCII "Usage: UseAction(slot, [, target] [, button])"
01733912 |. 57 PUSH EDI ; |Arg1
01733913 |. E8 D87A0B00 CALL Wow.017EB3F0 ; \Wow.017EB3F0
01733918 |. 83C4 08 ADD ESP,8
0173391B |. 33C0 XOR EAX,EAX
0173391D |. 5F POP EDI
0173391E |. 8BE5 MOV ESP,EBP
01733920 |. 5D POP EBP
01733921 \. C3 RETN
And this is a snippet of the calling function:
Code:
012AB025 |. 83C4 0C ADD ESP,0C
012AB028 |> 8B56 18 MOV EDX,DWORD PTR DS:[ESI+18]
012AB02B |. 8B42 04 MOV EAX,DWORD PTR DS:[EDX+4]
012AB02E |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
012AB030 |. 8B79 18 MOV EDI,DWORD PTR DS:[ECX+18]
012AB033 |. 57 PUSH EDI
012AB034 |. E8 47063B00 CALL Wow.0165B680
012AB039 |. 56 PUSH ESI
012AB03A |. FFD7 CALL EDI
012AB03C |. 83C4 08 ADD ESP,8
012AB03F |. 85C0 TEST EAX,EAX
012AB041 |. 7D 0A JGE SHORT Wow.012AB04D
012AB043 |. 5F POP EDI
012AB044 |. 5E POP ESI
012AB045 |. B8 02000000 MOV EAX,2
012AB04A |. 5B POP EBX
012AB04B |. 5D POP EBP
012AB04C |. C3 RETN
EDI contains the address to the function UseAction and calls it like so:
012AB03A |. FFD7 CALL EDI
I cant really tell what parameters UseAction takes...