Exemplo n.º 1
0
 public CompleteObjectLocator(TypeDescriptor typeDescriptor, ClassHierarchyDescriptor classHierarchyDescriptor, int objectRootOffset, int constructorDescriptorOffset)
 {
     TypeDescriptor              = typeDescriptor ?? throw new ArgumentNullException(nameof(typeDescriptor));
     ClassHierarchyDescriptor    = classHierarchyDescriptor ?? throw new ArgumentNullException(nameof(classHierarchyDescriptor));
     ObjectRootOffset            = objectRootOffset;
     ConstructorDescriptorOffset = constructorDescriptorOffset;
 }
Exemplo n.º 2
0
        private ClassHierarchyDescriptor ReadClassHierarchyDescriptor(IntPtr pClassDescriptor)
        {
            ClassHierarchyDescriptor.MemoryStruct memoryStruct = new ClassHierarchyDescriptor.MemoryStruct();
            processMemoryReader.ReadStruct(pClassDescriptor, ref memoryStruct);

            if (memoryStruct.Signature != 0)
            {
                throw new InvalidDataException("Invalid class hierarchy signature");
            }

            ClassHierarchyDescriptor desc = new ClassHierarchyDescriptor(
                new List <BaseClassDescriptor>((int)memoryStruct.numBaseClasses),
                memoryStruct.Flags
                );

            IntPtr[] baseDescriptorPointers = processMemoryReader.ReadIntPtrArray(memoryStruct.pBaseClassArray, memoryStruct.numBaseClasses);

            for (uint baseClassIndex = 0; baseClassIndex < memoryStruct.numBaseClasses; ++baseClassIndex)
            {
                desc.BaseClasses.Add(ReadBaseClassDescriptor(baseDescriptorPointers[baseClassIndex]));
            }
            ;

            return(desc);
        }