"The Repopulation" is based off of the Hero Engine. You can buy it off of Steam.
Silver Edition is 19.99, Gold Edition 29.99 or something.
Homepage:
https://www.therepopulation.com/
Current Build Notes:
https://www.therepopulation.com/inde...-1-build-notes
While doing some work on this game for the last few days I ran into a few information road blocks.
I would like some help in understanding how the GOM works and how to parse it.
Refs used so far:
http://www.ownedcore.com/forums/mmo/...ding-info.html <-- Good thread, I wish I was apart of it in 2012. However I was in the working mans land.
Reversing Microsoft Visual C++ - sun_kang - ???
https://www.blackhat.com/presentatio...l_Yason-WP.pdf
http://www.ownedcore.com/forums/mmo/...g-started.html
http://www.ownedcore.com/forums/mmo/...gom-nodes.html <-- The offset he speaks of I'm not sure how to find it in "The Repopulation".GOM - HEWIKIThe Gom has a Pointer at Offset 654h
Node - HEWIKI
System nodes - HEWIKI
Javelin Interface - HEWIKI
Archetypes - HEWIKI
Prototypes - HEWIKI
I think I am coming up with the vftable correctly. I hope someone can chim in with some input. I'm currently working on finding all the functions of the GOM. I heard it was similar to a hashmap.
I found this walkthrough on hashmaps which is pretty good. I suggest you be a advanced c/c++ programmer to understand it. I understand it fine. No questions there.
Learn C The Hard Way
Now recreating it from memory addresses might be a bit of problem. I might need help with that.
So, I will be requiring help in rebuilding the hashtable structure and node structure. Most likely.
I might be able to get it on my own.
Here is what I have found:
Using tools you can find the GOM RTTI Information. The tool states 3 methods which I think is wrong.
As we go into the information we see the GOM Class layout for RTTI Information:
As we go into the first RTTI Structure which is "_RTTICompleteObjectLocator" it looks like:
struct RTTICompleteObjectLocator
{
DWORD signature; //always zero ?
DWORD offset; //offset of this vtable in the complete class
DWORD cdOffset; //constructor displacement offset
struct TypeDescriptor* pTypeDescriptor; //TypeDescriptor of the complete class
struct RTTIClassHierarchyDescriptor* pClassDescriptor; //describes inheritance hierarchy
};
signature is 0, offset is 0, cdOffset is 0, pTypeDescriptor is offset ??_R0?AVGOM@@@8, pClassDescriptor is offset ??_R3GOM@@8
Moving onto the "RTTI Type Descriptor":
We have a name of .?AVGOM@@ which is the class name GOM.
Moving onto the "_RTTIClassHierarchyDescriptor":
struct RTTIClassHierarchyDescriptor
{
DWORD signature; //always zero?
DWORD attributes; //bit 0 set = multiple inheritance, bit 1 set = virtual inheritance
DWORD numBaseClasses; //number of classes in pBaseClassArray
struct RTTIBaseClassArray* pBaseClassArray;
};
signature is 0, attributes is 0, numBaseClasses is 1, pBaseClassArray is offset ??_R2GOM@@8
As we look at the "_RTTIBaseClassArray" which is "_RTTIBaseClassDescriptor" :
struct RTTIBaseClassDescriptor
{
struct TypeDescriptor* pTypeDescriptor; //type descriptor of the class
DWORD numContainedBases; //number of nested classes following in the Base Class Array
struct PMD where; //pointer-to-member displacement info
DWORD attributes; //flags, usually 0
};
pTypeDescriptor is offset ??_R0?VGGOM@@@8, numContainedBases is 0, PMD where is ( 0, 0FFFFFFFFh, 0 ), attributes are 40h.
Looking at the PMD:
struct PMD
{
int mdisp; //member displacement
int pdisp; //vbtable displacement
int vdisp; //displacement inside vbtable
};
mdisp is 0, pdisp is 0FFFFFFFFh, vdisp is 0
So, there is the walkthrough of the GOM RTTI.
The thing I'm having trouble with is the GOM vftable would be @ address: 105A6E00 correct?
While looking at the Class GOM:
We see 2 xrefs on the address 105A6E00 for the vftable:
1. sub_1062b380+21:
and
2. sub_1062F840+2B:
Now if I use address 105A6E00 as my vftable address do I use the ESI offset addresses within the xrefs? To pin point the methods and other structure data?
Example on xref 1062B380:
mov dword ptr [esi], offset ??_7GOM@@6B@ ; const GOM::`vftable'
mov ecx, [esi+474h]
mov eax, [esi+47Ch]
mov ecx, [esi+458h]
mov eax, [esi+460h]
lea edi, [esi+440h]
lea edi, [esi+428h]
lea edi, [esi+410h]
So, we know the vftable is within "offset ??_7GOM@@6B@" which is put into esi. Then esi is being moved around and loaded a few times withing the function.
This is how we pin point the methods correct or other data within reclass?
So, as I open the game and attach reclass and go to 105A6E00 I see this:
Looks like 50 or so functions in the GOM. Can anyone confirm?
All GOM Functions: ( 528 total ) ( Unordered List )
There are 528 functions that I've found so far in the Class GOM.Code:GOM::disposeContext GOM::checkAllConstraintsOnFields GOM::checkAllConstraintsOnPrototypeOrganizer GOM::checkAllConstraintsOnScriptOrganizer GOM::checkAllConstraintsOnNamedPackageGroupOrganizer GOM::loadArea GOM::activateNodes GOM::modifyRootCreateAccountEntry GOM::lookupPlayerAccount GOM::lookupPlayerAccountNameByAccountID GOM::lookupPlayerAccountByAccountName GOM::lookupCharacterNameByCharacterId GOM::lookupCharacterByName GOM::changeCharacterName GOM::setNodeAsLoaded GOM::unsetNodeAsLoaded GOM::Cleanup GOM::verifyMailbox GOM::listMail GOM::VerifyNodeSerializationVersion GOM::initializeMemoryAnalyzer GOM::getDistributionPackageOfPrototype GOM::getNamedPackageGroupOfPrototype GOM::getNamedPackageGroupsOfPrototype GOM::getNumNamedPackageGroupsOfPrototype GOM::getNamedPackageGroupOfDefinition GOM::getNamedPackageGroupsOfDefinition GOM::getNumNamedPackageGroupsOfDefinition GOM::getNumNamedPackageGroupsOfArea GOM::getNamedPackageGroupOfArea GOM::checkMailChange GOM::checkNodeFieldChange GOM::checkDefinitionChange GOM::enableInMemoryAlterationUndo GOM::disableInMemoryAlterationUndo GOM::undoInMemoryAlterations GOM::listGUIXMLOrganizedEntries GOM::moveChildGUIXMLOrganization GOM::addChildGUIXMLOrganizationFromDB GOM::changeGUIXMLOrganizerName GOM::changeGUIXMLOrganizerDescription GOM::describeGUIXMLOrganizedEntry GOM::checkGUIXMLOrganizerChange GOM::verifyRootNode GOM::queryRootNodeParent GOM::queryRootNodeChildren GOM::queryRootNodeCharacters GOM::queryRootNodeAccounts GOM::queryRootNodeAreas GOM::queryRootNodes GOM::queryArbitraryRootNodes GOM::reparentRootNode GOM::rootNodeLoaded GOM::rootNodeUnloaded GOM::reapDeletedRootNodes GOM::reapSpecificRootNode GOM::listLoadedDeletedRoots GOM::applyAdjustmentToNode GOM::lookupClassFromScript GOM::lookupScriptFromClass GOM::setMethodConflictChecking GOM::lookupDefinitionName GOM::lookupDefinitionDescription GOM::lookupScriptDefName GOM::lookupEnumDefID GOM::lookupEnumDefName GOM::lookupClassDefID GOM::lookupClassDefName GOM::lookupFieldDefID GOM::getConfigVariableReference GOM::lookupFieldDefName GOM::lookupAssociationDefID GOM::lookupAssociationDefName GOM::lookupAssociationGroupDefID GOM::lookupAssociationGroupDefName GOM::lookupPrototypeID GOM::lookupPrototypeName GOM::lookupPrototypeDescription GOM::lookupScriptDefID GOM::lookupKeywordDefID GOM::isEnumDef GOM::isClassDef GOM::isFieldDef GOM::isKeywordDef GOM::isScriptDef GOM::isAssociationDef GOM::isAssociationGroupDef GOM::isPrototype GOM::isNamedPackageGroup GOM::changeDescriptionOfKeywordDef GOM::changeNamedPackageGroupsOfKeywordDef GOM::findKeywordDef GOM::changeDescriptionOfNamedPackageGroup GOM::findNamedPackageGroup GOM::describeNamedPackageGroup GOM::changeDescriptionOfEnumDef GOM::changeNamedPackageGroupsOfEnumDef GOM::findEnumDef GOM::addEnumDefValue GOM::findEnumDefValue GOM::listEnumDefValues GOM::getEnumDefValuesLength GOM::changeDescriptionOfFieldDef GOM::changeNamedPackageGroupsOfFieldDef GOM::changeReflectionOfFieldDef GOM::changeWriteStrategyOfFieldDef GOM::changeWatchingScriptOfFieldDef GOM::changePrivateStatusOfFieldDef GOM::describeFieldDef GOM::getFieldDefModifiers GOM::isFieldDefLightWeight GOM::getFieldWriteStrategy GOM::findFieldDef GOM::addFieldDefReplicationFromDB GOM::describeFieldDefReplication GOM::doesFieldHaveReplicationData GOM::setFieldDefReplication GOM::checkFieldReplicationChange GOM::applyFieldReplicationChange GOM::checkAddParentForInheritanceConflict GOM::removeFieldFromClassDef GOM::enumerateIncompatibilitiesOfClass GOM::areClassesCompatible GOM::removeParentFromClassDef GOM::describeClassDef GOM::enumerateParentsOfClass GOM::enumerateAncestorsOfClass GOM::enumerateFieldsOfThisClass GOM::enumerateFieldsOfClass GOM::findClassDef GOM::changeDescriptionOfClassDef GOM::changeArchetypeOfClassDef GOM::addClassDefReplicationFromDB GOM::addClassFieldReplicationFromDB GOM::addClassFieldAtomicFromDB GOM::setClassDefReplicationForUndo GOM::describeClassDefReplication GOM::addFieldToClassDefReplication GOM::removeFieldFromClassDefReplication GOM::addAtomicSetToClassDefReplication GOM::removeAtomicSetFromClassDefReplication GOM::changeNamedPackageGroupsOfClassDef GOM::checkClassReplicationChange GOM::checkClassFieldReplicationChange GOM::applyClassFieldReplicationChange GOM::applyClassReplicationAtomicSetChange GOM::changeDescriptionOfAssociationGroupDef GOM::changeNamedPackageGroupsOfAssociationGroupDef GOM::listAssociationsInAssociationGroup GOM::describeAssociationGroup GOM::changeDescriptionOfAssociationDef GOM::changeNamedPackageGroupsOfAssociationDef GOM::modifyAssociationGroupDefAddAssociationDef GOM::modifyAssociationGroupDefRemoveAssociationDef GOM::modifyAssociationGroupDefSetMutuallyExclusive GOM::validateHardAssociationGroup GOM::setHardAssociationGroup GOM::listAssociationDef GOM::createAssociationQueryObject GOM::queryAssociations GOM::queryAssociationsInList GOM::describeAssociation GOM::getAssociationSource GOM::getAssociationTarget GOM::fixCyclicHardAssociations GOM::changeDescriptionOfScriptDef GOM::changeNamedPackageGroupsOfScriptDef GOM::modifyScriptDefAddParent GOM::modifyScriptDefRemoveParent GOM::modifyScriptDefSetOwner GOM::modifyScriptDefSetTeam GOM::setLocalScriptDefModified GOM::modifyScriptDefSetModified GOM::getScriptDefCode GOM::getScriptDefRevision GOM::getScriptDefIntermRevision GOM::modifyScriptRevisionComment GOM::describeScriptDef GOM::describeScriptDefRevision GOM::getScriptLastRevisionNumber GOM::updateScriptDefRevisions GOM::checkRemoveScript GOM::whatIs GOM::whereUsed GOM::lookupHeroValueType GOM::lookupScriptCodeType GOM::lookupClassUberType GOM::lookupFieldType GOM::lookupFieldWriteStrategy GOM::lookupDefinitionType GOM::lookupDistributionPackage GOM::lookupNamedPackageGroupName GOM::lookupNamedPackageGroupID GOM::lookupNamedPackageGroupContents GOM::queryDefinitionsByType GOM::queryNamedPackageGroups GOM::stringFromVariable GOM::addNodeFromPrototype GOM::createNodeFromNode GOM::addNodeFromClassDef GOM::addNodeFromClassDefFromDB GOM::finalizeAddNodeFromClassDefFromDB GOM::enumerateIncompatibilitiesOfNodeAndClass GOM::doesNodeHaveClass GOM::getVariableReferenceFromNode GOM::describeNode GOM::setPropertyInterfaceOnNode GOM::getPropertyFromNode GOM::setPropertyOnNode GOM::modifyNodeAddClass GOM::modifyNodeRemoveClass GOM::modifyNodePersist GOM::modifyNodeSetLightweightFieldPointer GOM::clearLightWeightFieldsFromNode GOM::clearPropertyInterfaceOnNode GOM::modifyNodeSetWhetherReflecting GOM::modifyNodeSetIndestructible GOM::modifyNodeFieldValue GOM::checkRemoveNode GOM::queryNodes GOM::findParentsOfNode GOM::findChildrenOfNode GOM::findHardChildrenOfNode GOM::getNodeTimerSuspension GOM::suspendTimers GOM::unsuspendTimers GOM::AscribeNodeForStatistics GOM::GetNodeStatisticsAscription GOM::QueryNodesForStatisticsAscription GOM::addPrototypeFromClassDefFromDB GOM::finalizeAddPrototypeFromClassDefFromDB GOM::addPrototypeHeaderFromDB GOM::modifyPrototypeAddClassFromDB GOM::changePrototypeName GOM::changePrototypeDescription GOM::modifyPrototypeAddClass GOM::modifyPrototypeRemoveClass GOM::modifyPrototypeFieldValue GOM::describePrototype GOM::enumerateIncompatibilitiesOfPrototypeAndClass GOM::getVariableReferenceFromPrototype GOM::modifyPrototypeSetIndestructible GOM::removePrototype GOM::reinsertPrototype GOM::queryPrototypes GOM::checkPrototypeFieldChange GOM::applyPrototypeFieldChange GOM::addPrototypeToOrganization GOM::listProtoOrganizedEntries GOM::moveChildProtoOrganization GOM::addChildProtoOrganization GOM::addChildProtoOrganizationFromDB GOM::changeProtoOrganizerName GOM::changeProtoOrganizerDescription GOM::describeProtoOrganizedEntry GOM::removeProtoOrganizedEntry GOM::removeProtoOrganizedEntryItem GOM::checkPrototypeOrganizerChange GOM::applyPrototypeOrganizerChange GOM::addScriptToOrganization GOM::listScriptOrganizedEntries GOM::moveChildScriptOrganization GOM::addChildScriptOrganization GOM::addChildScriptOrganizationFromDB GOM::changeScriptOrganizerName GOM::changeScriptOrganizerDescription GOM::describeScriptOrganizedEntry GOM::removeScriptOrganizedEntry GOM::removeScriptOrganizedEntryItem GOM::checkScriptOrganizerChange GOM::applyScriptOrganizerChange GOM::addNamedPackageGroupToOrganization GOM::listNamedPackageGroupOrganizedEntries GOM::moveChildNamedPackageGroupOrganization GOM::addChildNamedPackageGroupOrganization GOM::addChildNamedPackageGroupOrganizationFromDB GOM::changeNamedPackageGroupOrganizerName GOM::changeNamedPackageGroupOrganizerDescription GOM::describeNamedPackageGroupOrganizedEntry GOM::removeNamedPackageGroupOrganizedEntry GOM::removeNamedPackageGroupOrganizedEntryItem GOM::checkNamedPackageGroupOrganizerChange GOM::applyNamedPackageGroupOrganizerChange GOM::checkChangeNamedPackageGroupsChange GOM::areaOrganizedIDList GOM::loadAreaOrganizer GOM::unloadAreaOrganizer GOM::addAreaFromDB GOM::addSegmentFromDB GOM::addMapsetFromDB GOM::listSegments GOM::listMapsets GOM::listMapsetsOfSegment GOM::getSegmentName GOM::getSegmentID GOM::getSegmentForMapset GOM::getMapsetName GOM::newSegment GOM::newMapset GOM::canAreaBeAdded GOM::newArea GOM::areaInstances GOM::listAllAreas GOM::listAreasOfMapset GOM::getAreaFQN GOM::getAreaRootID GOM::getAreaNumberByRoot GOM::addAreaToOrganization GOM::listAreaOrganizedEntries GOM::moveChildAreaOrganization GOM::addChildAreaOrganization GOM::addChildAreaOrganizationFromDB GOM::changeAreaOrganizerName GOM::changeAreaOrganizerDescription GOM::describeAreaOrganizedEntry GOM::removeAreaOrganizedEntry GOM::removeAreaEntryItem GOM::getAreaOrganizedName GOM::getAreaOrganizedNameAndSegment GOM::getAreaOrganizedID GOM::getAreaOrganizedDescription GOM::whoAreYou GOM::whoAreYouPlainly GOM::isClassUsedInNodes GOM::checkAddKeywordDefinition GOM::checkAddEnumDefinition GOM::checkAddFieldDefinition GOM::checkAddClassDefinition GOM::checkAddAssociationGroupDefinition GOM::checkAddScriptDefinition GOM::checkAddNamedPackageGroup GOM::addKeywordDefinition GOM::addEnumDefinition GOM::addFieldDefinition GOM::addAssociationGroupDefinition GOM::addNamedPackageGroup GOM::checkChangeKeywordDefinitionName GOM::checkChangeEnumDefinitionName GOM::checkChangeFieldDefinitionName GOM::checkChangeClassDefinitionName GOM::checkChangeAssociationDefinitionName GOM::checkChangeAssociationGroupDefinitionName GOM::checkChangeScriptDefinitionName GOM::checkChangeNamedPackageGroupName GOM::changeNamedPackageGroupName GOM::checkRemoveDefinition GOM::checkRemoveNamedPackageGroup GOM::removeDefinition GOM::removeNamedPackageGroup GOM::createContext GOM::loadGOMbyRootNode GOM::setAreaRoot GOM::changeAreaRoot GOM::changeAreaName GOM::changeAreaDescription GOM::changeAreaDistributionPackage GOM::changeAreaLastEditTime GOM::deleteAreaRoot GOM::deleteAccountEntryFromRoot GOM::deleteCharacterEntryFromRoot GOM::unloadNode GOM::Pump GOM::unloadGOM GOM::createMailbox GOM::removeMailbox GOM::DeserializeNodeFromStream GOM::changeDistributionPackageOfPrototype GOM::getDistributionPackageOfDefinition GOM::checkAreaChange GOM::checkNodeChange GOM::applyNodeFieldChange GOM::checkNodeAssociationChange GOM::persistAssociationRemoval GOM::persistAssociationAddition GOM::notifyAssociationRemoval GOM::notifyAssociationAddition GOM::addNamedPackageGroupsToDefinition GOM::removeNamedPackageGroupsFromDefinition GOM::addChildGUIXMLOrganization GOM::removeGUIXMLOrganizedEntry GOM::createRootNode GOM::destroyRootNode GOM::addKeywordDef GOM::addKeywordDefFromDB GOM::removeKeywordDef GOM::reinsertKeywordDef GOM::checkKeywordDefChange GOM::addNamedPackageGroupFromDB GOM::changeNameOfNamedPackageGroup GOM::reinsertNamedPackageGroup GOM::checkNamedPackageGroupChange GOM::applyNamedPackageGroupChange GOM::addEnumDef GOM::addEnumDefFromDB GOM::removeEnumDef GOM::reinsertEnumDef GOM::checkEnumDefChange GOM::reinsertEnumDefValue GOM::changeEnumDefValue GOM::removeEnumDefValue GOM::_addFieldDef GOM::addFieldDefFromDB GOM::removeFieldDef GOM::reinsertFieldDef GOM::checkFieldDefChange GOM::addFieldToClassDef GOM::inheritParentToClassDef GOM::addClassDefIncompatibility GOM::removeClassDefIncompatibility GOM::removeClassDef GOM::addAssociationGroupDef GOM::addAssociationGroupDefFromDB GOM::removeAssociationGroupDef GOM::reinsertAssociationGroupDef GOM::validateAssociationAdd GOM::removeAssociationDef GOM::describeAssociationDef GOM::checkAssociationGroupDefChange GOM::addAssociationFromDB GOM::modifyScriptDefSetDeleted GOM::modifyScriptDefSetCode GOM::describeScriptDefRevisions GOM::removeScriptDef GOM::checkScriptDefChange GOM::createNodeFromClassDef GOM::createNodeFromPrototype GOM::enumeratePropertiesOnNode GOM::removeNodeFromJavelin GOM::removeNodeFromMemory GOM::getDefIDsUsedByNode GOM::addPrototypeFromPrototype GOM::createPrototypeFromNode GOM::addPrototypeFromClassDef GOM::removePrototypesOfUberType GOM::checkPrototypeChange GOM::createChildProtoOrganization GOM::createChildScriptOrganization GOM::createChildNamedPackageGroupOrganization GOM::applyChangeNamedPackageGroupsChange GOM::createChildAreaOrganization GOM::checkAddAssociationDefinition GOM::addClassDefinition GOM::addAssociationDefinition GOM::addScriptDefinition GOM::changeDefinitionName GOM::checkAllConstraintsOnClasses GOM::sendMail GOM::changeDistributionPackageOfDefinition GOM::applyAreaChange GOM::applyDefinitionChange GOM::addGUIXMLToOrganization GOM::createChildGUIXMLOrganization GOM::removeGUIXMLOrganizedEntryItem GOM::applyGUIXMLOrganizerChange GOM::createKeywordDef GOM::changeNameOfKeywordDef GOM::applyKeywordDefChange GOM::createNamedPackageGroup GOM::createNewEnumDef GOM::changeNameOfEnumDef GOM::applyEnumDefChange GOM::changeNameOfFieldDef GOM::changeTypeOfFieldDef GOM::applyFieldDefChange GOM::addClassDef GOM::addClassDefFromDB GOM::reinsertClassDef GOM::changeNameOfClassDef GOM::createNewAssociationGroupDef GOM::changeNameOfAssociationGroupDef GOM::changeNameOfAssociationDef GOM::addAssociationDef GOM::addAssociationDefFromDB GOM::reinsertAssociationDef GOM::applyAssociationGroupDefChange GOM::checkAssociationDefChange GOM::applyAssociationDefChange GOM::addAssociation GOM::removeAssociation GOM::removeAssociations GOM::removeAssociationsOf GOM::removeAssociationByReference GOM::addScriptDef GOM::addScriptDefFromDB GOM::changeNameOfScriptDef GOM::reinsertScriptDef GOM::applyScriptDefChange GOM::whereNotUsed GOM::removeNode GOM::createPrototypeFromClassDef GOM::createPrototypeFromPrototype GOM::changePrototypeNamedPackageGroups GOM::addNamedPackageGroupsToPrototype GOM::removeNamedPackageGroupsFromPrototype GOM::applyPrototypeChange GOM::cloneHard GOM::cloneNodeTree GOM::getMail GOM::getNamedPackageGroupsOfArea GOM::addNamedPackageGroupsToArea GOM::removeNamedPackageGroupsFromArea GOM::applyNodeChange GOM::applyNodeAssociationChange GOM::createNewFieldDef GOM::createNewLightweightFieldDef GOM::createNewClassDef GOM::swapParentsOfClassDef GOM::checkClassDefChange GOM::applyClassDefChange GOM::describeClassInheritanceChain GOM::createNewAssociationDef GOM::createScriptDef GOM::removeMail GOM::applyMailChange GOM::describeClassDefFieldAtomicSets GOM::setClassDefReplication GOM::applyClassReplicationChange GOM::checkClassReplicationAtomicSetChange GOM::buildDefinitionStream GOM::checkBundleChange GOM::applyBundleChange GOM::describeClassDefFieldReplication GOM::checkCoordinatedMessageChange GOM::applyCoordinatedMessageChange GOM::persistToStream GOM::readDefinitionStream GOM::initializeFromStream GOM::HD_FIELD
Blew my 50 function theory out of the water.
The HD_FIELD might not be a function. So, the total becomes 527 functions.
Lookup Reference after finding the function you want to use:
GOM- and DOM-related functions - HEWIKI
All ID Functions: ( 4 Total ):
Code:GOM::getSegmentID GOM::getAreaRootID GOM::getAreaOrganizedID GOM::getDefIDsUsedByNode
All Query Functions: ( 15 Total )
Code:GOM::queryRootNodeParent GOM::queryRootNodeChildren GOM::queryRootNodeCharacters GOM::queryRootNodeAccounts GOM::queryRootNodeAreas GOM::queryRootNodes GOM::queryArbitraryRootNodes GOM::createAssociationQueryObject GOM::queryAssociations GOM::queryAssociationsInList GOM::queryDefinitionsByType GOM::queryNamedPackageGroups GOM::queryNodes GOM::QueryNodesForStatisticsAscription GOM::queryPrototypes
All SET Functions: ( 33 total )
Code:GOM::setNodeAsLoaded GOM::unsetNodeAsLoaded GOM::setMethodConflictChecking GOM::setFieldDefReplication GOM::setClassDefReplicationForUndo GOM::addAtomicSetToClassDefReplication GOM::removeAtomicSetFromClassDefReplication GOM::applyClassReplicationAtomicSetChange GOM::modifyAssociationGroupDefSetMutuallyExclusive GOM::setHardAssociationGroup GOM::modifyScriptDefSetOwner GOM::modifyScriptDefSetTeam GOM::setLocalScriptDefModified GOM::modifyScriptDefSetModified GOM::setPropertyInterfaceOnNode GOM::setPropertyOnNode GOM::modifyNodeSetLightweightFieldPointer GOM::modifyNodeSetWhetherReflecting GOM::modifyNodeSetIndestructible GOM::modifyPrototypeSetIndestructible GOM::addMapsetFromDB GOM::listMapsets GOM::listMapsetsOfSegment GOM::getSegmentForMapset GOM::getMapsetName GOM::newMapset GOM::listAreasOfMapset GOM::setAreaRoot GOM::modifyScriptDefSetDeleted GOM::modifyScriptDefSetCode GOM::describeClassDefFieldAtomicSets GOM::setClassDefReplication GOM::checkClassReplicationAtomicSetChange
All GET Functions: ( 41 total )
Code:GOM::getDistributionPackageOfPrototype GOM::getNamedPackageGroupOfPrototype GOM::getNamedPackageGroupsOfPrototype GOM::getNumNamedPackageGroupsOfPrototype GOM::getNamedPackageGroupOfDefinition GOM::getNamedPackageGroupsOfDefinition GOM::getNumNamedPackageGroupsOfDefinition GOM::getNumNamedPackageGroupsOfArea GOM::getNamedPackageGroupOfArea GOM::getConfigVariableReference GOM::getEnumDefValuesLength GOM::getFieldDefModifiers GOM::getFieldWriteStrategy GOM::getAssociationSource GOM::getAssociationTarget GOM::getAssociationTarget GOM::getScriptDefCode GOM::getScriptDefRevision GOM::getScriptDefIntermRevision GOM::getScriptLastRevisionNumber GOM::getVariableReferenceFromNode GOM::getPropertyFromNode GOM::getNodeTimerSuspension GOM::GetNodeStatisticsAscription GOM::getVariableReferenceFromPrototype GOM::getSegmentName GOM::getSegmentID GOM::getSegmentForMapset GOM::getMapsetName GOM::getAreaFQN GOM::getAreaRootID GOM::getAreaNumberByRoot GOM::getAreaOrganizedName GOM::getAreaOrganizedNameAndSegment GOM::getAreaOrganizedID GOM::getAreaOrganizedDescription GOM::getDistributionPackageOfDefinition GOM::getDefIDsUsedByNode GOM::changeTypeOfFieldDef GOM::getMail GOM::getNamedPackageGroupsOfArea
All List Functions: ( 17 Total )
Code:GOM::listMail GOM::listGUIXMLOrganizedEntries GOM::listLoadedDeletedRoots GOM::listEnumDefValues GOM::listAssociationsInAssociationGroup GOM::listAssociationDef GOM::queryAssociationsInList GOM::listProtoOrganizedEntries GOM::listScriptOrganizedEntries GOM::listNamedPackageGroupOrganizedEntries GOM::areaOrganizedIDList GOM::listSegments GOM::listMapsets GOM::listMapsetsOfSegment GOM::listAllAreas GOM::listAreasOfMapset GOM::listAreaOrganizedEntries
All Lookup Functions: ( 35 Total )
Code:GOM::lookupPlayerAccount GOM::lookupPlayerAccountNameByAccountID GOM::lookupPlayerAccountByAccountName GOM::lookupCharacterNameByCharacterId GOM::lookupCharacterByName GOM::lookupClassFromScript GOM::lookupScriptFromClass GOM::lookupDefinitionName GOM::lookupDefinitionDescription GOM::lookupScriptDefName GOM::lookupEnumDefID GOM::lookupEnumDefName GOM::lookupClassDefID GOM::lookupClassDefName GOM::lookupFieldDefID GOM::lookupFieldDefName GOM::lookupAssociationDefID GOM::lookupAssociationDefName GOM::lookupAssociationGroupDefID GOM::lookupAssociationGroupDefName GOM::lookupPrototypeID GOM::lookupPrototypeName GOM::lookupPrototypeDescription GOM::lookupScriptDefID GOM::lookupKeywordDefID GOM::lookupHeroValueType GOM::lookupScriptCodeType GOM::lookupClassUberType GOM::lookupFieldType GOM::lookupFieldWriteStrategy GOM::lookupDefinitionType GOM::lookupDistributionPackage GOM::lookupNamedPackageGroupName GOM::lookupNamedPackageGroupID GOM::lookupNamedPackageGroupContents
All Root Functions: ( 25 Total )
Code:GOM::modifyRootCreateAccountEntry GOM::verifyRootNode GOM::queryRootNodeParent GOM::queryRootNodeChildren GOM::queryRootNodeCharacters GOM::queryRootNodeAccounts GOM::queryRootNodeAreas GOM::queryRootNodes GOM::queryArbitraryRootNodes GOM::reparentRootNode GOM::rootNodeLoaded GOM::rootNodeUnloaded GOM::reapDeletedRootNodes GOM::reapSpecificRootNode GOM::listLoadedDeletedRoots GOM::getAreaRootID GOM::getAreaNumberByRoot GOM::loadGOMbyRootNode GOM::setAreaRoot GOM::changeAreaRoot GOM::deleteAreaRoot GOM::deleteAccountEntryFromRoot GOM::deleteCharacterEntryFromRoot GOM::createRootNode GOM::destroyRootNode
Create Functions: (25 Functions)
Code:GOM::modifyRootCreateAccountEntry GOM::createAssociationQueryObject GOM::createNodeFromNode GOM::createContext GOM::createMailbox GOM::createRootNode GOM::createNodeFromClassDef GOM::createNodeFromPrototype GOM::createPrototypeFromNode GOM::createChildProtoOrganization GOM::createChildScriptOrganization GOM::createChildNamedPackageGroupOrganization GOM::createChildAreaOrganization GOM::createChildGUIXMLOrganization GOM::createKeywordDef GOM::createNamedPackageGroup GOM::createNewEnumDef GOM::createNewAssociationGroupDef GOM::createPrototypeFromClassDef GOM::createPrototypeFromPrototype GOM::createNewFieldDef GOM::createNewLightweightFieldDef GOM::createNewClassDef GOM::createNewAssociationDef GOM::createScriptDef
Looking at the xref from the GOM Class above 1062B380 we see:
take a look at the v1 = this; and *(_DWORD *)this = &GOM::vftable;Code:void __thiscall sub_1062B380(void *this) { void *v1; // esi@1 int v2; // ecx@1 int v3; // ecx@3 void *v4; // edi@29 void *v5; // edi@31 void *v6; // edi@33 void *v7; // edi@35 int v8; // ecx@67 int v9; // esi@75 v1 = this; *(_DWORD *)this = &GOM::`vftable'; sub_105B6210((int)this); v2 = *((_DWORD *)v1 + 285); if ( v2 ) stlp_std::__node_alloc::deallocate(v2, 4 * ((*((_DWORD *)v1 + 287) - v2) >> 2)); v3 = *((_DWORD *)v1 + 278); if ( v3 ) stlp_std::__node_alloc::deallocate(v3, 4 * ((*((_DWORD *)v1 + 280) - v3) >> 2)); if ( *((_DWORD *)v1 + 276) ) { sub_10177160(*((_DWORD *)v1 + 273)); *((_DWORD *)v1 + 274) = (char *)v1 + 1088; *((_DWORD *)v1 + 273) = 0; *((_DWORD *)v1 + 275) = (char *)v1 + 1088; *((_DWORD *)v1 + 276) = 0; } if ( *((_DWORD *)v1 + 270) ) { sub_10158580(*((_DWORD *)v1 + 267)); *((_DWORD *)v1 + 268) = (char *)v1 + 1064; *((_DWORD *)v1 + 267) = 0; *((_DWORD *)v1 + 269) = (char *)v1 + 1064; *((_DWORD *)v1 + 270) = 0; } if ( *((_DWORD *)v1 + 264) ) { sub_10158580(*((_DWORD *)v1 + 261)); *((_DWORD *)v1 + 262) = (char *)v1 + 1040; *((_DWORD *)v1 + 261) = 0; *((_DWORD *)v1 + 263) = (char *)v1 + 1040; *((_DWORD *)v1 + 264) = 0; } if ( *((_DWORD *)v1 + 258) ) { sub_10158580(*((_DWORD *)v1 + 255)); *((_DWORD *)v1 + 256) = (char *)v1 + 1016; *((_DWORD *)v1 + 255) = 0; *((_DWORD *)v1 + 257) = (char *)v1 + 1016; *((_DWORD *)v1 + 258) = 0; } if ( *((_DWORD *)v1 + 252) ) { sub_10158580(*((_DWORD *)v1 + 249)); *((_DWORD *)v1 + 250) = (char *)v1 + 992; *((_DWORD *)v1 + 249) = 0; *((_DWORD *)v1 + 251) = (char *)v1 + 992; *((_DWORD *)v1 + 252) = 0; } if ( *((_DWORD *)v1 + 246) ) { sub_10158580(*((_DWORD *)v1 + 243)); *((_DWORD *)v1 + 244) = (char *)v1 + 968; *((_DWORD *)v1 + 243) = 0; *((_DWORD *)v1 + 245) = (char *)v1 + 968; *((_DWORD *)v1 + 246) = 0; } if ( *((_DWORD *)v1 + 240) ) { sub_10158580(*((_DWORD *)v1 + 237)); *((_DWORD *)v1 + 238) = (char *)v1 + 944; *((_DWORD *)v1 + 237) = 0; *((_DWORD *)v1 + 239) = (char *)v1 + 944; *((_DWORD *)v1 + 240) = 0; } if ( *((_DWORD *)v1 + 227) ) { sub_100A6F90(*((_DWORD *)v1 + 224)); *((_DWORD *)v1 + 225) = (char *)v1 + 892; *((_DWORD *)v1 + 224) = 0; *((_DWORD *)v1 + 226) = (char *)v1 + 892; *((_DWORD *)v1 + 227) = 0; } stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>((char *)v1 + 852); stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>((char *)v1 + 812); stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>((char *)v1 + 772); stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>((char *)v1 + 732); if ( *((_DWORD *)v1 + 180) ) { sub_10177160(*((_DWORD *)v1 + 177)); *((_DWORD *)v1 + 178) = (char *)v1 + 704; *((_DWORD *)v1 + 177) = 0; *((_DWORD *)v1 + 179) = (char *)v1 + 704; *((_DWORD *)v1 + 180) = 0; } if ( *((_DWORD *)v1 + 174) ) { sub_10177160(*((_DWORD *)v1 + 171)); *((_DWORD *)v1 + 172) = (char *)v1 + 680; *((_DWORD *)v1 + 171) = 0; *((_DWORD *)v1 + 173) = (char *)v1 + 680; *((_DWORD *)v1 + 174) = 0; } if ( *((_DWORD *)v1 + 168) ) { sub_10177160(*((_DWORD *)v1 + 165)); *((_DWORD *)v1 + 166) = (char *)v1 + 656; *((_DWORD *)v1 + 165) = 0; *((_DWORD *)v1 + 167) = (char *)v1 + 656; *((_DWORD *)v1 + 168) = 0; } if ( *((_DWORD *)v1 + 162) ) { sub_10177160(*((_DWORD *)v1 + 159)); *((_DWORD *)v1 + 160) = (char *)v1 + 632; *((_DWORD *)v1 + 159) = 0; *((_DWORD *)v1 + 161) = (char *)v1 + 632; *((_DWORD *)v1 + 162) = 0; } v4 = (void *)*((_DWORD *)v1 + 157); if ( v4 ) { sub_106A3870(v4); operator delete(v4); } v5 = (void *)*((_DWORD *)v1 + 154); if ( v5 ) { sub_106A47A0(v5); operator delete(v5); } v6 = (void *)*((_DWORD *)v1 + 153); if ( v6 ) { sub_106A3870(v6); operator delete(v6); } v7 = (void *)*((_DWORD *)v1 + 152); if ( v7 ) { sub_106A3870(v7); operator delete(v7); } if ( *((_DWORD *)v1 + 147) ) { sub_106450D0(*((_DWORD *)v1 + 144)); *((_DWORD *)v1 + 145) = (char *)v1 + 572; *((_DWORD *)v1 + 144) = 0; *((_DWORD *)v1 + 146) = (char *)v1 + 572; *((_DWORD *)v1 + 147) = 0; } if ( *((_DWORD *)v1 + 141) ) { sub_100A7040(*((_DWORD *)v1 + 138)); *((_DWORD *)v1 + 139) = (char *)v1 + 548; *((_DWORD *)v1 + 138) = 0; *((_DWORD *)v1 + 140) = (char *)v1 + 548; *((_DWORD *)v1 + 141) = 0; } if ( *((_DWORD *)v1 + 135) ) { sub_1067DD00(*((_DWORD *)v1 + 132)); *((_DWORD *)v1 + 133) = (char *)v1 + 524; *((_DWORD *)v1 + 132) = 0; *((_DWORD *)v1 + 134) = (char *)v1 + 524; *((_DWORD *)v1 + 135) = 0; } if ( *((_DWORD *)v1 + 129) ) { sub_1067DD00(*((_DWORD *)v1 + 126)); *((_DWORD *)v1 + 127) = (char *)v1 + 500; *((_DWORD *)v1 + 126) = 0; *((_DWORD *)v1 + 128) = (char *)v1 + 500; *((_DWORD *)v1 + 129) = 0; } if ( *((_DWORD *)v1 + 123) ) { sub_1067DD00(*((_DWORD *)v1 + 120)); *((_DWORD *)v1 + 121) = (char *)v1 + 476; *((_DWORD *)v1 + 120) = 0; *((_DWORD *)v1 + 122) = (char *)v1 + 476; *((_DWORD *)v1 + 123) = 0; } if ( *((_DWORD *)v1 + 117) ) { sub_100A7040(*((_DWORD *)v1 + 114)); *((_DWORD *)v1 + 115) = (char *)v1 + 452; *((_DWORD *)v1 + 114) = 0; *((_DWORD *)v1 + 116) = (char *)v1 + 452; *((_DWORD *)v1 + 117) = 0; } if ( *((_DWORD *)v1 + 111) ) { sub_1067DD00(*((_DWORD *)v1 + 108)); *((_DWORD *)v1 + 109) = (char *)v1 + 428; *((_DWORD *)v1 + 108) = 0; *((_DWORD *)v1 + 110) = (char *)v1 + 428; *((_DWORD *)v1 + 111) = 0; } stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>((char *)v1 + 388); if ( *((_DWORD *)v1 + 95) ) { sub_100A7040(*((_DWORD *)v1 + 92)); *((_DWORD *)v1 + 93) = (char *)v1 + 364; *((_DWORD *)v1 + 92) = 0; *((_DWORD *)v1 + 94) = (char *)v1 + 364; *((_DWORD *)v1 + 95) = 0; } if ( *((_DWORD *)v1 + 89) ) { sub_100A7040(*((_DWORD *)v1 + 86)); *((_DWORD *)v1 + 87) = (char *)v1 + 340; *((_DWORD *)v1 + 86) = 0; *((_DWORD *)v1 + 88) = (char *)v1 + 340; *((_DWORD *)v1 + 89) = 0; } if ( *((_DWORD *)v1 + 83) ) { sub_100A7040(*((_DWORD *)v1 + 80)); *((_DWORD *)v1 + 81) = (char *)v1 + 316; *((_DWORD *)v1 + 80) = 0; *((_DWORD *)v1 + 82) = (char *)v1 + 316; *((_DWORD *)v1 + 83) = 0; } if ( *((_DWORD *)v1 + 77) ) { sub_100A7040(*((_DWORD *)v1 + 74)); *((_DWORD *)v1 + 75) = (char *)v1 + 292; *((_DWORD *)v1 + 74) = 0; *((_DWORD *)v1 + 76) = (char *)v1 + 292; *((_DWORD *)v1 + 77) = 0; } if ( *((_DWORD *)v1 + 71) ) { sub_100A7040(*((_DWORD *)v1 + 68)); *((_DWORD *)v1 + 69) = (char *)v1 + 268; *((_DWORD *)v1 + 68) = 0; *((_DWORD *)v1 + 70) = (char *)v1 + 268; *((_DWORD *)v1 + 71) = 0; } if ( *((_DWORD *)v1 + 65) ) { sub_100A7040(*((_DWORD *)v1 + 62)); *((_DWORD *)v1 + 63) = (char *)v1 + 244; *((_DWORD *)v1 + 62) = 0; *((_DWORD *)v1 + 64) = (char *)v1 + 244; *((_DWORD *)v1 + 65) = 0; } if ( *((_DWORD *)v1 + 59) ) { sub_100A7040(*((_DWORD *)v1 + 56)); *((_DWORD *)v1 + 57) = (char *)v1 + 220; *((_DWORD *)v1 + 56) = 0; *((_DWORD *)v1 + 58) = (char *)v1 + 220; *((_DWORD *)v1 + 59) = 0; } if ( *((_DWORD *)v1 + 53) ) { sub_1067DD00(*((_DWORD *)v1 + 50)); *((_DWORD *)v1 + 51) = (char *)v1 + 196; *((_DWORD *)v1 + 50) = 0; *((_DWORD *)v1 + 52) = (char *)v1 + 196; *((_DWORD *)v1 + 53) = 0; } v8 = *((_DWORD *)v1 + 48); if ( v8 ) (**(void (__stdcall ***)(_DWORD))v8)(1); if ( *((_DWORD *)v1 + 26) ) { sub_10177160(*((_DWORD *)v1 + 23)); *((_DWORD *)v1 + 24) = (char *)v1 + 88; *((_DWORD *)v1 + 23) = 0; *((_DWORD *)v1 + 25) = (char *)v1 + 88; *((_DWORD *)v1 + 26) = 0; } if ( *((_DWORD *)v1 + 20) ) { sub_10177160(*((_DWORD *)v1 + 17)); *((_DWORD *)v1 + 18) = (char *)v1 + 64; *((_DWORD *)v1 + 17) = 0; *((_DWORD *)v1 + 19) = (char *)v1 + 64; *((_DWORD *)v1 + 20) = 0; } if ( *((_DWORD *)v1 + 14) ) { sub_10177160(*((_DWORD *)v1 + 11)); *((_DWORD *)v1 + 12) = (char *)v1 + 40; *((_DWORD *)v1 + 11) = 0; *((_DWORD *)v1 + 13) = (char *)v1 + 40; *((_DWORD *)v1 + 14) = 0; } v9 = (int)((char *)v1 + 12); if ( *(_DWORD *)(v9 + 16) ) { sub_10177160(*(_DWORD *)(v9 + 4)); *(_DWORD *)(v9 + 8) = v9; *(_DWORD *)(v9 + 4) = 0; *(_DWORD *)(v9 + 12) = v9; *(_DWORD *)(v9 + 16) = 0; } }
We notice there is actuall another object/structure/class within v1. Lets trace it backward and see what the hell it is.
We get two xrefs leading to sub_1062B380.
Lets take a look at the one in the top most memory, which is the top 1 in the window.
We end up here: sub_1062B380(dword_10BCD74C); while tracing backward.Code:void __usercall sub_100CE090(int a1@<esi>, int a2, int a3) { size_t v3; // ebx@1 char v4; // al@6 char v5; // al@17 int v6; // eax@19 char v7; // al@24 int v8; // eax@25 int v9; // eax@25 int v10; // eax@25 size_t v11; // eax@28 unsigned int v12; // esi@28 size_t v13; // edi@28 int v14; // eax@28 int v15; // ebx@28 int v16; // eax@28 void *v17; // eax@28 int v18; // eax@28 const void *v19; // esi@32 int v20; // eax@33 int v21; // eax@33 size_t v22; // esi@33 void *v23; // ebx@49 char v24; // al@66 char v25; // al@72 char v26; // bl@73 int v27; // esi@73 int v28; // eax@73 int v29; // eax@73 int v30; // eax@73 int v31; // eax@73 int v32; // eax@73 int v33; // eax@73 char *v34; // ecx@73 char v35; // al@79 char v36; // al@85 char v37; // al@91 char v38; // al@97 int v39; // esi@100 __int64 v40; // ST3C_8@100 int v41; // edi@100 __int64 v42; // ST34_8@100 int v43; // ebx@100 int v44; // eax@100 int v45; // eax@100 int v46; // eax@100 int v47; // eax@100 int v48; // eax@100 int v49; // eax@100 int v50; // eax@100 int v51; // eax@100 int v52; // eax@100 int v53; // eax@100 int v54; // eax@100 int v55; // eax@100 char v56; // al@106 char v57; // al@113 char v58; // ST44_1@119 int v59; // esi@125 int v60; // edi@125 int v61; // eax@125 int v62; // eax@125 int v63; // eax@125 int v64; // eax@125 int v65; // eax@125 int v66; // eax@125 __int64 v67; // [sp-8h] [bp-77Ch]@7 char v68; // [sp+0h] [bp-774h]@0 char v69; // [sp+8h] [bp-76Ch]@25 char v70; // [sp+30h] [bp-744h]@28 int v71; // [sp+58h] [bp-71Ch]@25 int v72; // [sp+80h] [bp-6F4h]@100 char v73; // [sp+A8h] [bp-6CCh]@125 char v74; // [sp+D0h] [bp-6A4h]@100 char v75; // [sp+F8h] [bp-67Ch]@125 int v76; // [sp+120h] [bp-654h]@25 char v77; // [sp+148h] [bp-62Ch]@125 char v78; // [sp+170h] [bp-604h]@100 int v79; // [sp+198h] [bp-5DCh]@125 char v80; // [sp+1C0h] [bp-5B4h]@100 int v81; // [sp+1E8h] [bp-58Ch]@125 char v82; // [sp+210h] [bp-564h]@73 char v83; // [sp+238h] [bp-53Ch]@125 int v84; // [sp+260h] [bp-514h]@73 int v85; // [sp+288h] [bp-4ECh]@125 int v86; // [sp+2B0h] [bp-4C4h]@100 char v87; // [sp+2D8h] [bp-49Ch]@125 int v88; // [sp+300h] [bp-474h]@100 char v89; // [sp+328h] [bp-44Ch]@100 int v90; // [sp+350h] [bp-424h]@100 char v91; // [sp+378h] [bp-3FCh]@100 int v92; // [sp+3A0h] [bp-3D4h]@100 char v93; // [sp+3C8h] [bp-3ACh]@100 char v94; // [sp+3F0h] [bp-384h]@73 char v95; // [sp+418h] [bp-35Ch]@100 int v96; // [sp+440h] [bp-334h]@73 char v97; // [sp+468h] [bp-30Ch]@100 char v98; // [sp+490h] [bp-2E4h]@73 int v99; // [sp+4B8h] [bp-2BCh]@100 int v100; // [sp+4E0h] [bp-294h]@73 int v101; // [sp+508h] [bp-26Ch]@100 int v102; // [sp+530h] [bp-244h]@28 char v103; // [sp+558h] [bp-21Ch]@100 int v104; // [sp+580h] [bp-1F4h]@73 char v105; // [sp+5A8h] [bp-1CCh]@32 char v106; // [sp+5D4h] [bp-1A0h]@33 int v107; // [sp+5FCh] [bp-178h]@25 char v108; // [sp+624h] [bp-150h]@33 char v109; // [sp+64Ch] [bp-128h]@25 char v110; // [sp+6FCh] [bp-78h]@30 int v111; // [sp+700h] [bp-74h]@19 char v112; // [sp+728h] [bp-4Ch]@43 int v113; // [sp+730h] [bp-44h]@31 int v114; // [sp+734h] [bp-40h]@31 int v115; // [sp+738h] [bp-3Ch]@43 void *v116; // [sp+73Ch] [bp-38h]@32 int v117; // [sp+740h] [bp-34h]@108 int v118; // [sp+744h] [bp-30h]@74 size_t v119; // [sp+748h] [bp-2Ch]@32 int v120; // [sp+74Ch] [bp-28h]@12 int v121; // [sp+750h] [bp-24h]@1 size_t v122; // [sp+754h] [bp-20h]@26 int v123; // [sp+758h] [bp-1Ch]@27 char v124; // [sp+75Dh] [bp-17h]@19 char v125; // [sp+75Eh] [bp-16h]@33 char v126; // [sp+75Fh] [bp-15h]@33 size_t v127; // [sp+760h] [bp-14h]@27 size_t v128; // [sp+764h] [bp-10h]@1 int v129; // [sp+770h] [bp-4h]@19 v3 = 0; v128 = 0; initializeReceivedMsg(a2, 0); if ( receivedMsgGetInt32(&v121, 32) != 1 ) { if ( dword_10B9AB64 || (unsigned __int8)sub_10002540() ) { if ( sub_10002730() ) { if ( sub_10002750() <= 10 ) { v4 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v4); } } } return; } HIDWORD(v67) = a1; if ( v121 > 411 ) { if ( v121 == 429 ) goto LABEL_12; if ( v121 == 517 ) { if ( receivedMsgGetInt32(&v118, 32) == 1 ) { if ( receivedMsgGetString(&v122) == 1 ) { if ( receivedMsgGetUInt32(&v128, 32) == 1 ) { if ( receivedMsgGetUInt32(&v123, 32) == 1 ) { if ( receivedMsgGetInt32(&v127, 32) != 1 ) v127 = 0; stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v109, 16, 1); v129 = 0; v39 = sub_106465C0((unsigned int)&v91, v127); LODWORD(v40) = v123; LOBYTE(v129) = 1; v41 = sub_10646630(&v93, v40); LODWORD(v42) = v128; LOBYTE(v129) = 2; v43 = sub_10646630(&v95, v42); LOBYTE(v129) = 3; v120 = sub_106465C0((unsigned int)&v97, v118); LOBYTE(v129) = 4; v44 = sub_100093E0((int)&v99, (size_t)L"ORGANIZERMSG ", a3); LOBYTE(v129) = 5; v45 = sub_10006520((int)&v101, v44, (size_t)L"COMPILEERRORS "); LOBYTE(v129) = 6; v46 = sub_10005ED0(&v103, v45, v120); LOBYTE(v129) = 7; v47 = sub_10006520((int)&v86, v46, (size_t)L" "); LOBYTE(v129) = 8; v48 = sub_10005ED0(&v78, v47, v43); LOBYTE(v129) = 9; v49 = sub_10006520((int)&v88, v48, (size_t)L" "); LOBYTE(v129) = 10; v50 = sub_10005ED0(&v74, v49, v41); LOBYTE(v129) = 11; v51 = sub_10006520((int)&v90, v50, (size_t)L" "); LOBYTE(v129) = 12; v52 = sub_10005ED0(&v80, v51, v39); LOBYTE(v129) = 13; v53 = sub_10006520((int)&v92, v52, (size_t)L" "); LOBYTE(v129) = 14; v54 = sub_10006520((int)&v72, v53, v122); LOBYTE(v129) = 15; sub_10010DD0(&v109, v54); LOBYTE(v129) = 14; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v72); LOBYTE(v129) = 13; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v92); LOBYTE(v129) = 12; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v80); LOBYTE(v129) = 11; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v90); LOBYTE(v129) = 10; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v74); LOBYTE(v129) = 9; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v88); LOBYTE(v129) = 8; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v78); LOBYTE(v129) = 7; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v86); LOBYTE(v129) = 6; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v103); LOBYTE(v129) = 5; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v101); LOBYTE(v129) = 4; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v99); LOBYTE(v129) = 3; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v97); LOBYTE(v129) = 2; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v95); LOBYTE(v129) = 1; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v93); LOBYTE(v129) = 0; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v91); v55 = stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::str( &v109, &v89); LOBYTE(v129) = 16; sub_100F7B70(v55); LOBYTE(v129) = 0; v34 = &v89; goto LABEL_127; } if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v38 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v38); } } else if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v37 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v37); } } else if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v36 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v36); } } else if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v35 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v35); } } else { if ( v121 != 611 ) { LABEL_56: if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) sub_10003480(10, 0, -1, (int)L"System", L"Unknown message type from Compiler Server: %d.", v121); return; } if ( receivedMsgGetInt32(&v123, 32) == 1 ) { if ( receivedMsgGetString(&v127) == 1 ) { stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v109, 16, 1); v26 = 17; v129 = 17; v27 = sub_106465C0((unsigned int)&v82, v123); LOBYTE(v129) = 18; v28 = sub_100093E0((int)&v96, (size_t)L"ORGANIZERMSG ", a3); LOBYTE(v129) = 19; v29 = sub_10006520((int)&v104, v28, (size_t)L"COMPILERESULTS "); LOBYTE(v129) = 20; v30 = sub_10005ED0(&v98, v29, v27); LOBYTE(v129) = 21; v31 = sub_10006520((int)&v84, v30, (size_t)L" "); LOBYTE(v129) = 22; v32 = sub_10006520((int)&v100, v31, v127); LOBYTE(v129) = 23; sub_10010DD0(&v109, v32); LOBYTE(v129) = 22; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v100); LOBYTE(v129) = 21; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v84); LOBYTE(v129) = 20; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v98); LOBYTE(v129) = 19; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v104); LOBYTE(v129) = 18; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v96); LOBYTE(v129) = 17; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v82); v33 = stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::str( &v109, &v94); LOBYTE(v129) = 24; sub_100F7B70(v33); v34 = &v94; LABEL_126: LOBYTE(v129) = v26; LABEL_127: stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(v34); v129 = -1; stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::`vbase destructor(&v109); return; } if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v25 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v25); } } else if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v24 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v24); } } } else { if ( v121 != 411 ) { if ( v121 == 302 ) { if ( receivedMsgGetInt32(&v122, 32) == 1 && receivedMsgGetBytes(&v123, &v127) == 1 ) { v11 = sub_1052CE60(v123, v127, &v128); v12 = v128; v13 = v11; v14 = sub_100093E0((int)&v102, (size_t)L"HSE2 ", a3); v129 = 34; sub_10006520((int)&v111, v14, (size_t)L"_DECL "); LOBYTE(v129) = 36; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v102); v15 = stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::size(&v111); v16 = stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::size(&v111); stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::resize( &v111, (v12 >> 1) + v16); v17 = (void *)stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::operator[](&v111); memcpy(v17, (const void *)v15, v13); sub_1052D520(v13); stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v109, 16, 1); LOBYTE(v129) = 37; sub_10010DD0(&v109, &v111); v18 = stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::str( &v109, &v70); LOBYTE(v129) = 38; sub_100F7B70(v18); LOBYTE(v129) = 37; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v70); LOBYTE(v129) = 36; stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::`vbase destructor(&v109); LABEL_29: v129 = -1; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v111); return; } } else { if ( v121 != 404 ) { if ( v121 == 409 ) { LABEL_12: if ( receivedMsgGetInt32(&v120, 32) != 1 ) { if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v5 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v5); } return; } if ( receivedMsgGetUInt32(&v127, 32) != 1 ) { if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v56 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v56); } return; } if ( v121 == 429 ) { v117 = 0; v118 = 0; if ( receivedMsgGetUInt64(&v117, 64) != 1 ) { if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v57 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v57); } return; } v128 = 0; if ( receivedMsgGetBytes(&v122, &v128) != 1 ) goto LABEL_115; if ( (signed int)v128 > 0 && (unsigned __int8)sub_10003710(a3, L"CLIENT") && v127 > 1 ) sub_100A23A0(dword_10BCD048, v122, v128); } stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v109, 16, 1); LODWORD(v67) = v127; v26 = 25; v129 = 25; v59 = sub_10646630(&v75, v67); LOBYTE(v129) = 26; v60 = sub_106465C0((unsigned int)&v77, v120); LOBYTE(v129) = 27; v61 = sub_100093E0((int)&v79, (size_t)L"ORGANIZERMSG ", a3); LOBYTE(v129) = 28; v62 = sub_10006520((int)&v81, v61, (size_t)L"SUBMITSUCCEEDED "); LOBYTE(v129) = 29; v63 = sub_10005ED0(&v83, v62, v60); LOBYTE(v129) = 30; v64 = sub_10006520((int)&v85, v63, (size_t)L" "); LOBYTE(v129) = 31; v65 = sub_10005ED0(&v87, v64, v59); LOBYTE(v129) = 32; sub_10010DD0(&v109, v65); LOBYTE(v129) = 31; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v87); LOBYTE(v129) = 30; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v85); LOBYTE(v129) = 29; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v83); LOBYTE(v129) = 28; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v81); LOBYTE(v129) = 27; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v79); LOBYTE(v129) = 26; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v77); LOBYTE(v129) = 25; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v75); v66 = stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::str( &v109, &v73); LOBYTE(v129) = 33; sub_100F7B70(v66); v34 = &v73; goto LABEL_126; } goto LABEL_56; } if ( receivedMsgGetString(&v128) == 1 ) { v6 = stlp_std::allocator<wchar_t>::allocator<wchar_t>(&v124); v129 = 39; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v111, v128, v6); LOBYTE(v129) = 41; stlp_std::allocator<wchar_t>::~allocator<wchar_t>(&v124); if ( receivedMsgGetString(&v128) == 1 ) { v8 = sub_100093E0((int)&v71, (size_t)L"HSE2 FIND_DEF ", (int)&v111); LOBYTE(v129) = 42; v9 = sub_10006520((int)&v76, v8, (size_t)L"\t"); LOBYTE(v129) = 43; sub_10006520((int)&v107, v9, v128); LOBYTE(v129) = 45; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v76); LOBYTE(v129) = 46; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v71); stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v109, 16, 1); LOBYTE(v129) = 47; sub_10010DD0(&v109, &v107); v10 = stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::str( &v109, &v69); LOBYTE(v129) = 48; sub_100F7B70(v10); LOBYTE(v129) = 47; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v69); LOBYTE(v129) = 46; stlp_std::basic_ostringstream<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::`vbase destructor(&v109); LOBYTE(v129) = 41; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v107); } else if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v7 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v7); } goto LABEL_29; } } LABEL_115: if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { v58 = getLastError(); sub_10003480(10, 0, -1, (int)L"System", L"FireStormAPI Error: %s", v58); } return; } if ( receivedMsgGetInt32(&v110, 32) != 1 || receivedMsgGetBytes(&v114, &v113) != 1 ) goto LABEL_115; v19 = (const void *)sub_1052CE60(v114, v113, &v119); sub_100D3C00(v119); v129 = 49; memcpy(v116, v19, v119); sub_1052D520(v19); sub_100D41B0(&v116); LOBYTE(v129) = 50; sub_10647620(&v105); LOBYTE(v129) = 51; v122 = (size_t)operator new(0x488u); if ( v122 ) { v20 = stlp_std::allocator<wchar_t>::allocator<wchar_t>(&v126); v128 = 1; LOBYTE(v129) = 53; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v106, &word_108E5944, v20); v21 = stlp_std::allocator<wchar_t>::allocator<wchar_t>(&v125); v129 = 55; v128 = 7; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>( &v108, &word_108E5944, v21); v3 = 15; v129 = 56; v128 = 15; v22 = sub_1062F840(0, &v108, &v106); } else { v22 = 0; } v127 = v22; v129 = 62; if ( v3 & 8 ) { v3 &= 0xFFFFFFF7; v128 = v3; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v108); } if ( v3 & 4 ) { v3 &= 0xFFFFFFFB; stlp_std::allocator<wchar_t>::~allocator<wchar_t>(&v125); } LOBYTE(v129) = 64; if ( v3 & 2 ) { v3 &= 0xFFFFFFFD; v128 = v3; stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>::~basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>(&v106); } LOBYTE(v129) = 65; if ( v3 & 1 ) stlp_std::allocator<wchar_t>::~allocator<wchar_t>(&v126); sub_10639EE0(&v115, &v112, 0); if ( v115 == dword_10C0253C ) { v23 = dword_10BCD74C; if ( dword_10BCD74C ) { sub_1062B380(dword_10BCD74C); operator delete(v23); } v127 = 0; dword_10BCD74C = (void *)v22; } else if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { sub_10003480(10, 0, -1, (int)L"System", L"failed to deserialize server DOM", v68); } sub_100D2830(&v127); LOBYTE(v129) = 50; sub_10647C20(&v112); LOBYTE(v129) = 49; sub_100A07D0(&v105); v129 = -1; sub_103A2DF0(&v116); } }
We notice that this is probably the DOM because of this if statement:
Code:if ( v115 == dword_10C0253C ) { v23 = dword_10BCD74C; if ( dword_10BCD74C ) { sub_1062B380(dword_10BCD74C); operator delete(v23); } v127 = 0; dword_10BCD74C = (void *)v22; } else if ( (dword_10B9AB64 || (unsigned __int8)sub_10002540()) && sub_10002730() && sub_10002750() <= 10 ) { sub_10003480(10, 0, -1, (int)L"System", L"failed to deserialize server DOM", v68); }
dword_10C0253C most likely DOM vftable: ( I found bonez for the character inside )
I think I'm understanding the GOM and DOM now. I just need to figure out its data structure and parse through it now. More studying
I'm hoping someone will join me soon
Feel free to post some more references I haven't looked at above. Any information helps. Thanks.
Kind Regards,
-BitHacker