Python code for getting 'objects' element, also contains structure data:
import sys
import struct
#CONFIG
filePath = sys.argv[1]
#END OF CONFIG
print(filePath)
#XmbDocument
f = open(filePath, 'rb')
xmb2 = f.read(4)
eof = struct.unpack('L', f.read(4))[0]
flags = struct.unpack('H', f.read(2))[0]
version = struct.unpack('H', f.read(2))[0]
rootElement = struct.unpack('L', f.read(4))[0]
f.seek(rootElement-4,1) #xmbDocument is casted now to XmbElement
#XmbElement
xmb2Element_elementStartOffset = struct.unpack('L', f.read(4))[0] #v6
xmb2Element_attributeStartOffset = struct.unpack('L', f.read(4))[0]
xmb2Element_elementCount = struct.unpack('H', f.read(2))[0]
xmb2Element_attributeCount = struct.unpack('H', f.read(2))[0] >> 8
f.seek(-12,1) #going back to XMB2Element root
AbsoluteXmb2ElementRoot = f.tell() # &v3->elementStartOffset_
IndexPointer = 0 #v4
SignedPointer = AbsoluteXmb2ElementRoot + 4 * IndexPointer + xmb2Element_elementStartOffset
f.seek(SignedPointer, 0)
SignedPointerValue = struct.unpack('i', f.read(4))[0]
v7 = AbsoluteXmb2ElementRoot + (4*IndexPointer) + xmb2Element_elementStartOffset + SignedPointerValue
#(char *)(v7 + *(_DWORD *)(v7 + 4) + 4i64);
v8Pointer = v7 + 4
f.seek(v8Pointer, 0)
v8PointerValue = struct.unpack('I', f.read(4))[0]
_ = v7 + v8PointerValue + 4
f.seek(_,0)
#v9 = &v8[*(_DWORD *)v8];
v8 = struct.unpack('i', f.read(4))[0]
f.seek(-4,1)
v8Pointer = f.tell()
v9 = v8Pointer + v8
f.seek(v9, 0)
v9Pt = struct.unpack('B', f.read(1))[0]
if v9Pt == 1:
f.seek(v9+5, 0)
v10Pt = struct.unpack('I', f.read(4))[0]
v10 = v9+v10Pt+5
f.seek(v10,0)
objectName = f.read().split('\0')[0]
print('Index: ' + str(IndexPointer) + ': ' + objectName)