Skip to content

Incorrect virtual offsets for CBaseObject in TF2 on Windows #6

@nosoop

Description

@nosoop

As requested, here's the vtable dumper mismatch that was initially reported on Discord:

  • CBaseObject::CanBeUpgraded(CTFPlayer*) is offset 375, dumper reports 374
  • CBaseObject::StartUpgrading() is offset 376, dumper reports 375
  • CBaseObject::GetMaxUpgradeLevel() is offset 380, dumper reports 379

[2:24 PM] nosoop: curious what's different between win/linux for the CBaseObject table, windows offsets are off by one there
[...]
[2:25 PM] nosoop: I mean the windows offset is off by one from actual (CBaseObject::CanBeUpgraded(CTFPlayer) is 375, not 376 as the webapp reports)
[...]
[3:21 PM] asherkin: ah, multiple inheritance
[3:26 PM] asherkin: I suspect the problem is it thinking that FindObjectOnBuildPoint should be skipped on Windows
[3:28 PM] asherkin: the confusion seems to be because that is both on the actual CBaseObject vtable and one of the MI classes
[3:29 PM] asherkin: in fact I think that case is one of the main ones that led to the "This class uses C++ features which can not be accounted for by this tool." as there doesn't seem to be a way to tell them apart

edit: mixed up the dumper results because of a copy/paste error, my bad

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions