You'll need to update the TIB of your new remote thread.
Before your function call do something like this:
fs mov eax, [0x2C]
mov eax, [eax]
add eax, 0x10
mov dword [eax], edx // edx = s_curMgr
You'll need to update the TIB of your new remote thread.
Before your function call do something like this:
fs mov eax, [0x2C]
mov eax, [eax]
add eax, 0x10
mov dword [eax], edx // edx = s_curMgr
Thanks for the reply sku,
I updated the TIB as you suggested and then followed the fucntion in CE.
My code still returned 0 but I noticed that EAX after the call was set the the base address of the object corresponding to the guid.
I added a new line to my code:
OM.wow.Asm.AddLine("mov [{0}], eax", objectBase);
and then after injection and execution I read the uint stored at objectBase and it returns the correct base address![]()
this application has encountered a critical error:
ERROR #132 (0x85100084)Fatal exception
program:e:\wow.exe
exception: 0xc0000005(access_violation) at 001b:0091c563
the instruction at "0x0091c563"referenced memory at "0x20206144"
the memory could not be "read"
Sorry for all the extra code w/ the labels..but: the code only bugs when I select something other than myself (ie. if I target myself it shows the tempTarb.baseaddress perfectly(which == localplayer.base ..which shows correctly) ..but when I target a monster my GetObjBaseByGuid() function returns 0 )
[code that causes error]
tempTarg = New wowMobObject(wowBasicObject.GetObjectBaseByGuid(LocalPlayer.TargetGuid))
If tempTarg.Guid = LocalPlayer.Guid Then
lblTargetHp.Text = "Hp. SELF"
lblTargetLvl.Text = "Lvl. SELF"
lblLpTargetGuid.Text = "Lp.TargBA: " & tempTarg.BaseAddress
lblLPTargetBA.Text = "Lp.BA: " & LocalPlayer.BaseAddress
Else
lblLpTargetGuid.Text = "Lp.TargetGuid: " & LocalPlayer.TargetGuid
lblLPTargetBA.Text = "Lp.TargetBA: " & tempTarg.BaseAddress
lblTargetLvl.Text = "Lvl." & tempTarg.Level
lblTargetHp.Text = "Hp." & tempTarg.HP
Application.DoEvents()
End If
-------------------GetObjBaseByGuid()
Dim tempObj As New wowBasicObject(FirstObjectAddress)
While tempObj.BaseAddress <> 0
If tempObj.Guid = GUID Then
Return tempObj.BaseAddress
ElseIf tempObj.Guid = 0 Then
Return 0 ' FAIL, wth!!!
Else
'isn't correct object...next please
'valid next object, next obj please
If memReader.ReadUInt32(New IntPtr(tempObj.BaseAddress + EnumOffsets.wowBasicObjectOffsets.NextObjectPointer)) = FirstObjectAddress Then
'we've reached the end of the loop..exit while
'if we got here..mob.guid not found!
Exit While
ElseIf memReader.ReadUInt32(New IntPtr(tempObj.BaseAddress + EnumOffsets.wowBasicObjectOffsets.NextObjectPointer)) = 0 Then
'NBP is invalid...leave
'Unknown error?
Exit While
Else
'should be a good NBP,keep looping
tempObj.BaseAddress = memReader.ReadUInt32(New IntPtr(tempObj.BaseAddress + EnumOffsets.wowBasicObjectOffsets.NextObjectPointer))
End If
End If
End While
---------wowBasicObject Guid-----------------
Public ReadOnly Property Guid() As UInt64
Get
Try
Return memReader.ReadInt64(New IntPtr(_baseAddress + EnumOffsets.wowBasicObjectOffsets.Guid))
Catch ex As Exception
DoOutput("wowBasicObject.GUID problem..overflow?")
End Try
End Get
End Property
when the target isn't myself I keep getting the last error "wowBasicObject.Guid...overflow?"
something to notice, maybe: My LocalPlayer.Guid is something low const like... 40200..and mobs have huge guid's like 492225152121456. just not sure why it works for LocalPlayer.Guid but not amob.Guid
Thanks to anyone who read all of that.
SOLVED: Had wowBasicObject.Guid reading Long, not ULong..works now.
ps. any comments on the code as far as how I handle my objects??
Last edited by abuckau907; 07-08-2009 at 09:10 PM. Reason: solved