Rebuilding vTables? menu

User Tag List

Results 1 to 7 of 7
  1. #1
    aeo's Avatar Contributor
    Reputation
    135
    Join Date
    Apr 2007
    Posts
    286
    Thanks G/R
    97/68
    Trade Feedback
    7 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Rebuilding vTables?

    Im interested in taking my bot base/ObjMgr to a more simple state with the use of EnumVisibleObjects and GetObjPtr as well as just using the CGObject vtable to make my calls with less hassel to update with WoD arrives.

    Code:
    .rdata:00D6CFC4 off_D6CFC4      dd 50544CF7h            ; DATA XREF: sub_890260r
    .rdata:00D6CFC8 off_D6CFC8      dd offset CGObject_C__GetObjectDisplayTransportGUID
    .rdata:00D6CFC8                                         ; DATA XREF: CGSceneObject_C__CGSceneObject_C+4Eo
    .rdata:00D6CFC8                                         ; sub_890750+Eo
    .rdata:00D6CFCC                 dd offset CGObject_C__GetObjectDisplayPosition
    .rdata:00D6CFD0                 dd offset CGObject_C__GetObjectDisplayRawPosition
    .rdata:00D6CFD4                 dd offset CGObject_C__GetObjectDisplaySmoothFacing
    .rdata:00D6CFD8                 dd offset CGObject_C__GetObjectDisplayMatrix
    .rdata:00D6CFDC                 dd offset CGObject_C__GetObjectDisplayTargetScale
    .rdata:00D6CFE0                 dd offset CGObject_C__GetObjectDisplayTargetModelScal
    From what i have been looking at these vTables are in the rdata section. Im just not sure how to go about rebuilding them as when i look at them there are plenty of functions that do not belong when i compare to some of the other vTables around I've seen in my searches.

    I have also looked for IDA scripts/Plugins to do this but couldn't find anything that worked well. So my question is how does one turn the above into something nice and pretty like this( TOM_RUS vTable):

    Code:
    
    class CGObject_C // sizeof(CGObject_C) == 0xD0
    {
    public:
        template <typename T> T& GetValue(uint32 index) const { return *((T*)&m_data[index]); }
    
    
        virtual ~CGObject_C(); // 0
        virtual void Disable(); // 1
        virtual void Reenable(); // 2 Reenable(CClientObjCreate  const&)
        virtual void PostReenable(); // 3 PostReenable(CClientObjCreate  const&)
        virtual void HandleOutOfRange(); // 4 HandleOutOfRange(OUT_OF_RANGE_TYPE)
        virtual void UpdateWorldObject(); // 5 UpdateWorldObject(int)
        virtual void ShouldFadeout(); // 6
        virtual void UpdateDisplayInfo(); // 7 UpdateDisplayInfo(int)
        virtual void GetNamePosition(); // 8
        virtual void GetBag(); // 9
        virtual void GetBag2(); // 10
        virtual C3Vector& GetPosition(C3Vector &pos); // 11 GetPosition(C3Vector &)
    virtualC3Vector&GetRawPosition(C3Vector&pos);// 12 GetRawPosition(C3Vector &)
    
    Im hoping the answer is silly and stupid but from my searches i couldnt find it. Thanks guys,

    Rebuilding vTables?
  2. #2
    Jadd's Avatar 🐸 Premium Seller
    Reputation
    1515
    Join Date
    May 2008
    Posts
    2,433
    Thanks G/R
    81/336
    Trade Feedback
    1 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Code:
    CGObject_C *object = *(CGObject_C*) 0x12345678;
    object->UpdateDisplayInfo();
    0x12345678 being the object's base address.

  3. #3
    aeo's Avatar Contributor
    Reputation
    135
    Join Date
    Apr 2007
    Posts
    286
    Thanks G/R
    97/68
    Trade Feedback
    7 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    I understand the concept of call them. What I don't understand is how you locate and create the class definition based on what you see in ida (fig 1 above). Clearly the addresses listed do not match the vtable directly as you can see get position is at an index much higher then 10 or 11 which are where I usually see them referenced. Also sorry for spelling I'm on mobile.

  4. #4
    TOM_RUS's Avatar Legendary
    Reputation
    914
    Join Date
    May 2008
    Posts
    699
    Thanks G/R
    0/52
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    vtable from first code block is for sub class (CGSceneObject_C) of CGameObject_C class and it's pointer isn't located at 0 offset. Why do you even need it?
    Last edited by TOM_RUS; 04-27-2014 at 04:30 PM.

  5. #5
    aeo's Avatar Contributor
    Reputation
    135
    Join Date
    Apr 2007
    Posts
    286
    Thanks G/R
    97/68
    Trade Feedback
    7 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Maybe I was unclear. So what I did was grab the rdata xrefs to cgobject getPosition. Basicly from what I have read the vtable is in the rdata section but get position has 4? ( mobile again) references in the rdata section. The figures above were just examples of what a vtable looks like in rdata ( not specificly cgobject) and what I want to create. Every rdata reference to getposition puts it at an index well above 10. This is why I'm unsure of how to recrate the class based on the rdata as it isn't just as simple as counting down from the off -xxxxxx above the defined function name?

    I hope this is more clear.
    Last edited by aeo; 04-27-2014 at 06:59 PM.

  6. #6
    TOM_RUS's Avatar Legendary
    Reputation
    914
    Join Date
    May 2008
    Posts
    699
    Thanks G/R
    0/52
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    GetPosition is at index 39 according to my research (build 5.4.7.18019). So it's well above 10.

    CGPlayer_C vtable (this is NOT from 5.4.7.18019, but should be really close or equal to what live client has)
    Code:
    CGObject_C::GetObjectDisplayTransportGUID(void)
    CGObject_C::GetObjectDisplayPosition(void)
    CGObject_C::GetObjectDisplayRawPosition(void)
    CGUnit_C::GetObjectDisplaySelectionPosition(void)
    CGUnit_C::GetObjectDisplaySelectionCircleAnim(void)
    CGObject_C::GetObjectDisplaySmoothFacing(void)
    CObjectDisplayInterface::GetObjectDisplayRoll(void)
    CGObject_C::GetObjectDisplayMatrix(void)
    CGObject_C::GetObjectDisplayTargetScale(void)
    CGObject_C::GetObjectDisplayTargetModelScale(void)
    CGObject_C::GetObjectDisplayBaseAlpha(void)
    CGObject_C::GetObjectDisplayHeight(void)
    CGObject_C::GetObjectDisplayName(void)
    CGUnit_C::GetObjectDisplayLevel(LEVEL_REASON)
    CGUnit_C::CanObjectDisplayHighlight(void)
    CGUnit_C::CanObjectDisplayBeTargeted(void)
    CGUnit_C::IsObjectDisplayHighlightSuppressed(void)
    CGUnit_C::HandleObjectDisplayTrackChange(void)
    CGUnit_C::GetObjectDisplaySelectionPriority(void)
    CGUnit_C::IsObjectDisplayLegalSelection(uint)
    CGUnit_C::IsObjectDisplayLowPrioritySelection(uint)
    CGObject_C::ShouldObjectDisplayRenderName(int)
    CGObject_C::OnObjectDisplayNameVisibilityChanged(void)
    CGObject_C::UpdateObjectDisplayNameString(int,char *,uint)
    CGObject_C::GetObjectDisplaySelectionHighlightColor(CArgb *)
    CGObject_C::GetObjectDisplayNamePosition(void)
    CGObject_C::GetObjectDisplayObjectEffectSpeed(void)
    CGPlayer_C::PostInit(uint,JamCliObjCreate  const&,bool)
    CGPlayer_C::Disable(void)
    CGPlayer_C::Reenable(JamCliObjCreate  const&)
    CGPlayer_C::PostReenable(JamCliObjCreate  const&)
    CGUnit_C::HandleOutOfRange(uint,C3Vector  const&,OUT_OF_RANGE_TYPE)
    CGUnit_C::PhaseIn(void)
    CGPlayer_C::PhaseOut(void)
    CGUnit_C::UpdateWorldObject(int)
    CGUnit_C::ShouldFadeout(void)
    CGUnit_C::UpdateDisplayInfo(int)
    CGObject_C::GetNamePosition(void)
    CGPlayer_C::GetBag(void)
    CGPlayer_C::GetBag(void)
    CGUnit_C::GetPosition(void)
    CGUnit_C::GetRawPosition(void)
    CGUnit_C::GetFacing(void)
    CGUnit_C::GetRawFacing(void)
    CGUnit_C::BuildMatrix(void)
    CGUnit_C::BuildMatrixFromFacing(void)
    CGUnit_C::BuildMatrixFromRotation(void)
    CGUnit_C::GetScale(void)
    CGUnit_C::GetModelScale(void)
    CGObject_C::GetObjectEffectSpeed(void)
    CGUnit_C::GetTransportGUID(void)
    CGObject_C::GetRotation(void)
    CGObject_C::SetFrameOfReference(C44Matrix  const*)
    CGUnit_C::IsQuestGiver(void)
    CGUnit_C::RefreshInteractIcon(void)
    CGUnit_C::UpdateInteractIcon(void)
    CGUnit_C::GetWorldEffectAttachSlotFiltered(WorldEffects::EffectInfo  const&)
    CGUnit_C::GetPermanentWorldEffects(WorldEffects::EffectInfo *,uint)
    CGUnit_C::GetModelFileName(char *)
    CGObject_C::Render(void)
    CGUnit_C::GetSelectionHighlightColor(CArgb *)
    CGPlayer_C::HandleGuildIDUpdate(void)
    CGPlayer_C::LoadGuildTextures(ulong long)
    CGUnit_C::ModelLoaded(CM2Model *)
    CGPlayer_C::PreAnimate(CGWorldFrame *)
    CGUnit_C::Animate(float)
    CGPlayer_C::ShouldRender(uint,int &,int &)
    CGUnit_C::GetRenderFacing(void)
    CGUnit_C::OnSpecialMountAnim(void)
    CGUnit_C::IsSolidSelectable(void)
    CGUnit_C::OnRightClick(void)
    CGUnit_C::OnLeftClick(void)
    CGUnit_C::GetMatrix(void)
    CGUnit_C::IsAIObstacle(float *,float *)
    CGUnit_C::ObjectNameVisibilityChanged(void)
    CGUnit_C::UpdateObjectNameString(int,char *,uint)
    CGUnit_C::ShouldRenderObjectName(int)
    CGUnit_C::GetObjectModel(void)
    CGUnit_C::GetObjectAnimKitMgr(void)
    CGUnit_C::GetObjectName(void)
    CGObject_C::GetPageTextID(void (*)(int,ulong long  const&,void *,bool))
    CGUnit_C::CleanUpVehicleBoneAnimsBeforeObjectModelChange(void)
    CGUnit_C::ShouldFadeIn(void)
    CGUnit_C::GetBaseAlpha(void)
    CGUnit_C::IsTransport(void)
    CGUnit_C::IsPointInside(C3Vector  const&)
    CGUnit_C::AddPassenger(CPassenger *,int)
    CGPlayer_C::GetAFKText(char *,int)
    CGPlayer_C::GetDNDText(char *,int)
    CGPlayer_C::GetGMText(char *,int)
    CGPlayer_C::GetDevText(char *,int)
    CGPlayer_C::GetComText(char *,int)
    CGPlayer_C::GetImpactType(void)
    CGPlayer_C::GetDefendingItem(void)
    CGPlayer_C::IsDeadOrGhost(void)
    CGUnit_C::AddSquelchedEffect(void)
    CGPlayer_C::GetVirtualItem(uint,bool)
    CGPlayer_C::GetVirtualItemDisplayID(uint,bool)
    CGPlayer_C::GetClientStandState(void)
    CGPlayer_C::GetSpellRank(SpellRec  const*)
    CGPlayer_C::GetDefenseSkillRank(int &,int &)
    CGPlayer_C::GetAttackSkillRank(int,int &,int &)
    CGPlayer_C::GetRangedAttackSkillRank(int &,int &)
    CGPlayer_C::GetSpellCastingTime(SpellRec  const*)
    CGUnit_C::GetPitch(void)
    CGUnit_C::GetUnitDisplayWoundAnim(int,ANIMATIONDATAENUM &,int &)
    CGUnit_C::GetUnitDisplayVirtualItem(uint,int)
    CGUnit_C::GetUnitDisplayVirtualItemDisplayID(uint,int)
    CGUnit_C::GetUnitDisplayVirtualRangedItemDisplayID(void)
    CGUnit_C::ApplyUnitDisplayHoverOffset(C3Vector &)
    CGUnit_C::GetUnitDisplayCreatureModelDataRec(void)
    CGUnit_C::GetUnitDisplayCreatureDisplayInfoRec(void)
    CGUnit_C::GetUnitDisplayCreatureDisplayInfoExtraRec(void)
    CGUnit_C::GetUnitDisplayCreatureClassification(bool &)
    CGUnit_C::OnUnitDisplayScaleChange(int)
    CGUnit_C::GetUnitDisplayHasHighPriorityCastingAnim(void)
    CGUnit_C::GetUnitDisplayRidingVehicle(void)
    CGUnit_C::GetUnitDisplayTargetSheatheState(void)
    CGUnit_C::GetUnitDisplayCastingSpell(void)
    CGUnit_C::GetUnitDisplaySpellCastingTime(SpellRec  const*)
    CGUnit_C::GetUnitDisplayClassRaceSex(uint &,uint &,uint &)
    CGUnit_C::GetUnitDisplayInMotion(void)
    CGUnit_C::GetUnitDisplayIsSwimming(void)
    CGUnit_C::OnUnitDisplayReleaseMissiles(void)
    CGUnit_C::OnUnitDisplayReleaseMissile(CMissile *)
    CGUnit_C::GetUnitDisplayVelocity(void)
    CGUnit_C::ShouldUnitDisplayHideWorldText(ulong long,bool &)
    CGUnit_C::ShouldUnitDisplayShowNamePlate(void)
    CGUnit_C::GetUnitDisplayHasAura(int,ulong long,int)
    CGUnit_C::OnUnitDisplayDeathAnim(void)
    CGUnit_C::GetUnitDisplayAuraVisualSpellIDs(TSGrowableArray<UnitDisplayAuraVisual> &)
    CGUnit_C::OnUnitDisplayPreShowRangedWeapon(void)
    CGUnit_C::OnUnitDisplayPostShowRangedWeapon(void)
    CGUnit_C::IsUnitDisplayDisarmed(int)
    CGUnit_C::GetUnitDisplayInitComponentData(BuildComponentData &)
    CGUnit_C::OnUnitDisplayComponentInitialized(void)
    CGUnit_C::RefreshUnitDisplayPlayerComponentItems(INVENTORY_SLOTS)
    CGUnit_C::GetUnitDisplayExcludedCloneAttachments(TSGrowableArray<UnitDisplayExcludedCloneAttachment> &)
    CGUnit_C::OnUnitDisplaySetSheatheState(int,bool)
    CGUnit_C::GetUnitDisplayCombatStatus(int &,int &)
    CGUnit_C::GetUnitDisplayHealth(bool)
    CGUnit_C::GetUnitDisplayMaxHealth(void)
    CGUnit_C::ShouldUnitDisplayAllowFootprints(UnitDisplayMoveData &)
    Last edited by TOM_RUS; 04-27-2014 at 08:15 PM.

  7. #7
    aeo's Avatar Contributor
    Reputation
    135
    Join Date
    Apr 2007
    Posts
    286
    Thanks G/R
    97/68
    Trade Feedback
    7 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Man OK I will go and double check maybe I was on the right path the entire time. Tomorrow at work I'll do some counting and go from there. Thanks tom. Also thanks for wow addin great resource.

    All the searching I did suggested it was around 10 that is what was throwing me off.
    Last edited by aeo; 04-27-2014 at 08:00 PM.

Similar Threads

  1. [Out of Process] Calling functions in the VTable.
    By cenron in forum WoW Memory Editing
    Replies: 12
    Last Post: 01-31-2009, 08:39 PM
  2. [Request] Alterac Valley Rebuild (Big i guess)
    By Creepfold in forum WoW ME Questions and Requests
    Replies: 0
    Last Post: 07-05-2008, 05:01 PM
  3. [Discussion] Long-term Azeroth rebuild
    By TheDipper in forum World of Warcraft Model Editing
    Replies: 22
    Last Post: 11-16-2007, 12:44 AM
  4. Rebuilding Quel'thalas with gnomish help
    By Tazjin in forum World of Warcraft Model Editing
    Replies: 5
    Last Post: 11-06-2007, 02:47 PM
All times are GMT -5. The time now is 07:08 AM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search